Qt scene-> addItem不显示QGraphicsPixmapItem

时间:2015-04-07 12:01:32

标签: c++ qt qgraphicsscene

下面是我通过按下按钮将位图文件添加到场景的代码。我可以通过scene-> addEllipse添加一个椭圆,但是我不能通过scene-> addItem添加/显示Menu1.bmp。如您所见,它们中的任何一个都具有相同的功能。同样在运行模式下,当我按下按钮时,我得到"项目已经被添加到这个场景"警告。为什么我看不到该项目是否已添加,有什么帮助吗?

.h文件

#include <QWidget>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QPushButton>
#include <QGraphicsItem>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void changeMenu();

private:
    Ui::Widget *ui;

    QGraphicsScene *scene;
    QGraphicsView *view;
    QPushButton *menu;
    QGraphicsPixmapItem *newItem;
};

.cpp文件

    #include "widget.h"
    #include "ui_widget.h"
    #include <QLayout>
    #include <QPixmap>

    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);

        scene = new QGraphicsScene(0, 0, 100, 100);
        view->setScene(scene);

        newItem=new QGraphicsPixmapItem(QPixmap(":/images/Menu1.bmp"));

        QHBoxLayout *labelLayout = new QHBoxLayout;
        menu = new QPushButton;
        menu->setText(tr("Menu"));        
        labelLayout->addWidget(view);
        labelLayout->addWidget(menu);
        connect(menu, SIGNAL(clicked()), this, SLOT(changeMenu()));
        setLayout(labelLayout);
    }

    void Widget::changeMenu()
    {
        if(!QPixmap(":/images/Menu1.bmp").isNull())
            scene->addEllipse(-10,-10,10,10);
        else
            scene->addEllipse(10,-100,10,100);
        scene->addItem(newItem);
    }

main.cpp文件

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

0 个答案:

没有答案