如果我刚从主要的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();
}
答案 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);