现在我可以做:

void MainWindow::on_actionPATH_triggered() {
    std::unique_ptr<QDialog> win(new QDialog());
    win->exec();
}

我应该使用async /在单独的线程中运行以避免阻塞主窗口,还是可以订阅关闭甚至删除/释放对象的方法?

最佳答案

您可以只使用show()

void MainWindow::on_actionPATH_triggered() {
    QDialog* win = new QDialog();
    //needed connect
    win->setAttribute(Qt::WA_DeleteOnClose);//we don't want memory leak
    win->show();
}

和使用
win->setModal(false);//but it is default option, you don't need to change it

doc:



当用户关闭对话框时,Qt::WA_DeleteOnClose将删除您的对话框。

您还可以将父级设置为对话框:
QDialog* win = new QDialog(this);

在这种情况下,win将与您的mainWindow一起删除。

Info about Qt parent child relationship

而且您这里不需要单独的线程。

关于c++ - 如何在不阻止主窗体的情况下创建对话框?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27363466/

10-12 21:50