现在我可以这样做:
void MainWindow::on_actionPATH_triggered() {
std::unique_ptr<QDialog> win(new QDialog());
win->exec();
}
我应该在单独的线程中使用async
/ run来避免阻塞主窗口,还是可以在那里订阅关闭偶数和删除/释放对象?
答案 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
你在这里不需要单独的线程。