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().