现在我可以做:
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
从文档:
默认情况下,此属性为false,并且show()弹出对话框为无模式。将其属性设置为true等效于将QWidget :: windowModality设置为Qt :: ApplicationModal。exec()忽略此属性的值,并始终以模式方式弹出对话框。
Qt::WA_DeleteOnClose
当用户关闭对话框时,它将删除您的对话框。
您还可以将父级设置为对话框:
QDialog* win = new QDialog(this);
在这种情况下,win
将使用mainWindow删除。
而且您这里不需要单独的线程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句