QGraphicsView不在mainWindow中显示

时间:2013-07-23 00:04:48

标签: c++ qt

如果我刚从主要的QGraphicsView开始,它会显示。 但是,如果我将QGraphicView放在mainwindow.cpp中,它会闪烁并消失吗?


 int main(int argc, char **argv)
 {
     QApplication a(argc, argv);

     QGraphicsView view;
     view.resize(1000, 800);
     view.show();

     return a.exec();
 }

 int main(int argc, char **argv)
 {
     QApplication a(argc, argv);

     MainWindow w;
     w.show();

     return a.exec();
 }


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

    QPushButton *m_button1 = new QPushButton("1", this);
    m_button1->setGeometry(QRect(QPoint(100, 100), QSize(100, 100)));
    connect(m_button1, SIGNAL(released()), this, SLOT(handleButton1()));
}

void MainWindow::handleButton1()
{
    QGraphicsView view;
    view.resize(1000, 800);
    view.show();
}

1 个答案:

答案 0 :(得分:2)

你已经在handleButton1()函数中创建了一个本地QGraphicsView变量,一旦函数完成就会被销毁,在你的第一个例子中,视图将一直存在,直到main()结尾为止。应用程序,即它在您关闭应用程序之前一直存在。你最好的选择是使用Qt Designer将QGraphicsView放在MainWindow中,或者给MainWindow一个私有的QGraphicsView *成员变量

如果您使用私有变量,请使用内置管理中的Qts将其父级设置为MainWindow,以便在窗口被销毁时清除它。

class MainWindow : QMainWindow {
    // etc...
    private:
        QGraphicsView *view;
}

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

    view = new QGraphicsView(this);
    view->setGeometry(QRect(50, 50, 400, 200));
    view->show();

    // etc...
}

如上所示,如果您有一个中央窗口小部件或任何您需要QGraphicsView的窗口小部件,那么您可以使用

view = new QGraphicsView(ui->centralWidget);