[英]How is Qdialog.exec() returning
我知道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);
如果查看QDialog
的源代碼 ,則可以看到以下部分:
// Reimplemented to exit a modal event loop when the dialog is hidden.
QWidget::setVisible(visible);
if (d->eventLoop)
d->eventLoop->exit();
因此,當mydialog::someMethod()
返回(或該方法返回的任何調用)時,您的對話框將關閉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.