c++ - Qdialog.exec() 是如何返回的

标签 c++ qt qdialog

我知道 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/

相关文章:

c++ - 将特征向量序列化为 QDataStream

c++ - QDialog exec() 并获取结果值

python - 使用 Python 在 Qt Designer 中加入另一个窗口

C++ 原始指针和 std::shared_ptr

c++ - googletest移动构造函数覆盖

c++ - 无法将带有俄语字符的 wstring 写入文件

qt - 在哪里可以找到旧版本的 QT(例如 QT 4.6)?

python - QFileDialog opens in new window while adding it to QHBoxLayout

qt - 从 qt 中的对话框打开新对话框

c++ - 在可变参数模板中复制的引用参数