我知道 qdialog->exec()
只有在调用 accept()
或 reject()
时才会返回。但是我正在使用以下代码:
mydialog* p =new mydialog(this);
p->setWindowModality(Qt::WindowModal);
int return_code= p->exec() ;//Block
if(return_code==1)
{
//Called when `accept()` is called --->Line A
}
else
{
//Called when reject is called ---> Line B
}
现在这个方法在mydialog
中调用。
void mydialog::someMethod()
{
if(somecondition)
{
dialog_a->setWindowModality(Qt::WindowModal);
dialog_a->setFixedSize(dialog_a->size());
this->setVisible(false);
if(dialog_a->exec()==1)
{
qDebug() << "Dialog A selected";
}
else
{
//back button was pressesed
if(dialog_a->terminate)
{
reject();
}
else
{
this->setVisible(true); // --->Line C
}
}
}
else
{
qDebug() << "Something else selected";
}
}
现在这里是调用上述方法时的问题,它在 C 行结束。然后调用 B 行。这是为什么?为什么 mydialog
正在退出?我没有在任何地方调用过 reject()
或 accept()
吗?
有什么建议么?
最佳答案
问题出在这一行:this->setVisible(false);
如果您查看 source code QDialog
,你可以看到这部分:
// Reimplemented to exit a modal event loop when the dialog is hidden.
QWidget::setVisible(visible);
if (d->eventLoop)
d->eventLoop->exit();
因此,当 mydialog::someMethod()
返回(或该方法返回的任何调用)时,您的对话框将关闭。
关于c++ - Qdialog.exec() 是如何返回的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25904858/