QTCreator 5.0.2,两个 window 的并行 运行,C++
QTCreator 5.0.2, parallel run of two window, C++
我通过了关于我的问题的建议“问题”。但是都没有解决。
我编程了两个 windows。第二个 window 从第一个 window 开始。我需要激活两个 windows,但是要启动第一个 window(MainWindow),我使用:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.setWindowModality(Qt::NonModal);
return a.exec();
}
如前所述,第二个 window 是从 pushButton 开始的,它以相同的方式位于第一个 window(MainWindow) 中。
void MainWindow::on_pushButton_2_clicked()
{
Graphics gr;
gr.setWindowModality(Qt::NonModal);
gr.exec();
}
我把模态改成了非模态,但是问题没有改变。非模态意味着:“window 不是模态的,不会阻止对其他 windows 的输入。” <- 来自文档
建议通过文档避免使用 .exec()。备选方案是 .show() 和 open(),我试过了。修改后,第二个window打开后立即关闭。打开后立即关闭。
你有什么想法,如何解决?
Graphics gr;
定义了一个局部变量,因此对象一旦超出范围(在函数结束时)就会被销毁。
在 Qt 中,典型的方法是使用指向 Qt 小部件的指针(更一般地说,QObjects
),但每个小部件都有一个父级——父级将清理它。
试试这个:
auto gr = new Graphics(this);
gr->setWindowModality(Qt::NonModal); // this is the default, no need for this call
gr->show();
这样 window 将存活到主 window 被破坏。在Qt中还有一种widgets/objects自毁的机制:
this->deleteLater();
因此,例如,如果您想关闭 和 清理 gr
,您可以使用该机制(您也可以将 gr
存储为成员并调用gr->deleteLater()
.
我通过了关于我的问题的建议“问题”。但是都没有解决。
我编程了两个 windows。第二个 window 从第一个 window 开始。我需要激活两个 windows,但是要启动第一个 window(MainWindow),我使用:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.setWindowModality(Qt::NonModal);
return a.exec();
}
如前所述,第二个 window 是从 pushButton 开始的,它以相同的方式位于第一个 window(MainWindow) 中。
void MainWindow::on_pushButton_2_clicked()
{
Graphics gr;
gr.setWindowModality(Qt::NonModal);
gr.exec();
}
我把模态改成了非模态,但是问题没有改变。非模态意味着:“window 不是模态的,不会阻止对其他 windows 的输入。” <- 来自文档 建议通过文档避免使用 .exec()。备选方案是 .show() 和 open(),我试过了。修改后,第二个window打开后立即关闭。打开后立即关闭。
你有什么想法,如何解决?
Graphics gr;
定义了一个局部变量,因此对象一旦超出范围(在函数结束时)就会被销毁。
在 Qt 中,典型的方法是使用指向 Qt 小部件的指针(更一般地说,QObjects
),但每个小部件都有一个父级——父级将清理它。
试试这个:
auto gr = new Graphics(this);
gr->setWindowModality(Qt::NonModal); // this is the default, no need for this call
gr->show();
这样 window 将存活到主 window 被破坏。在Qt中还有一种widgets/objects自毁的机制:
this->deleteLater();
因此,例如,如果您想关闭 和 清理 gr
,您可以使用该机制(您也可以将 gr
存储为成员并调用gr->deleteLater()
.