如何创建对话框而不阻止主窗体?

时间:2014-12-08 17:27:19

标签: c++ qt qtwidgets

现在我可以这样做:

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

我应该在单独的线程中使用async / run来避免阻塞主窗口,还是可以在那里订阅关闭偶数和删除/释放对象?

1 个答案:

答案 0 :(得分:3)

您只能使用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

  

默认情况下,此属性为false,show()会弹出对话框   无模式。将其属性设置为true等同于设置   QWidget :: windowModality到Qt :: ApplicationModal。 exec()忽略了   此属性的值,并始终将对话框弹出为模态。

当用户关闭对话框时,

Qt::WA_DeleteOnClose会删除您的对话框。

您也可以将父级设置为对话框:

QDialog* win = new QDialog(this);

在这种情况下,您的mainWindow将删除win

Info about Qt parent child relationship

你在这里不需要单独的线程。