我使用Qt5.7在C ++中编码。我正面临着QDialog exec()的问题。我需要它以模态,所以我不能使用show()。对话框完成并关闭后,UI将消失,但对话框变量和函数仍在运行。该对话框有一个定时器功能,用于将字节发送到串口,该口在关闭对话框后继续发送。相反,当我使用show()代替时,这不会发生。请帮忙。
我故意使用冗余命令进行测试,例如: QuitOnClose和DeleteOnClose ......但它们都没有按预期工作。
该对话框在MainWindow中创建
wizard = new Wizard();
wizard->setAttribute(Qt::WA_QuitOnClose);
wizard->setAttribute(Qt::WA_DeleteOnClose, true);
connect(wizard, SIGNAL(closeWizardForm()), this, SLOT(closeWizardForm()));
wizard->exec();
也
void MainWindow::closeWizardForm()
wizard->destroyed();
wizard = NULL;
在对话框中,它以
关闭void Wizard::closeEvent(QCloseEvent *event)
// "x" button clicked
if (changeMade == true){
// give warning if changes not saved
QMessageBox::StandardButton resBtn = QMessageBox::critical(this, "Setup Wizard", tr("Unsaved data will be lost. \r\n"
" Are you sure you want to quit?"),
QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
if (resBtn != QMessageBox::Yes){
event->ignore();
return;
}
}
// continue to quit
emit closeWizardForm();
event->accept();
this->close();
}
非常感谢您的关注。
SP。
答案 0 :(得分:0)
我在这里看不到删除Wizard对象的语句。在那里的某个地方,我希望看到:
delete wizard;
这意味着您的向导对象仍然存在,并且计时器仍将运行。在这种情况下,我不认为你会得到“show”与“exec”不同的结果,但也许你在两者之间切换时会改变别的东西。
发出“被破坏”的信号不会破坏物体,我认为你不应该自己发射它。我相信当您删除对象时,QObject析构函数会为您执行此操作。如果您发现这是必要的,那可能是因为您从未删除过该对象,因此从未调用过QObject析构函数。