【问题标题】:How to create dialog without blocking main form?如何在不阻塞主窗体的情况下创建对话框?
【发布时间】:2015-02-06 10:21:24
【问题描述】:

现在我可以做到:

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

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

【问题讨论】:

标签: c++ qt qtwidgets


【解决方案1】:

您可以只使用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);

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

Info about Qt parent child relationship

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    相关资源
    最近更新 更多