簡體   English   中英

Qdialog.exec()如何返回

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM