c++ - 如何在不阻塞主窗体的情况下创建对话框?

标签 c++ qt qtwidgets

现在我能做的:

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 :

By default, this property is false and show() pops up the dialog as modeless. Setting his property to true is equivalent to setting QWidget::windowModality to Qt::ApplicationModal. exec() ignores the value of this property and always pops up the dialog as modal.

Qt::WA_DeleteOnClose 将在用户关闭对话框时删除它。

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

QDialog* win = new QDialog(this);

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

Info about Qt parent child relationship

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

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

相关文章:

c++ - boost::multiprecision:乘以或除以 10 的巨大幂的最便宜的方法是什么?像 10 次幂的位移运算符之类的东西?

c++ - 在 Makefile 中创建对象

c++ - 确保 g++ 不会使用新版本 C++ 中添加的功能编译程序

c++ - 与主函数不同的文件中的自定义 QWidget

qt - 获取 QGraphicsItem 内的 QWidget 的位置

c++ - QTreeWidgetItem 中的 QWidget 在重新排序 QTreeWidgetItem 后消失

c++ - QDoubleSpinBox 在值和显示之间进行缩放

c++ - SQLServer 2008 通过 odbc 报告不正确的列字符串长度

c++ - 检查我的 QMainWindow 当前在 Qt 中是否可见

c++ - 如何正确地将带有 vtable 的类实例写入和读取到 QSharedMemory 中?