【问题标题】:How can I change the modality of QDialog at runtime?如何在运行时更改 QDialog 的模式?
【发布时间】:2012-05-31 20:27:28
【问题描述】:

我有一个 QDialog,我阅读了很多关于 show()、exec() 和 open() 的区别。不幸的是,我从未找到在运行时更改对话框模式的解决方案。 我有一个应用程序,从那里开始我的 QDialog。我在这个对话框中有一个切换按钮,点击它 QDialog 应该改变模式,以便可以与应用程序交互 - 但这不应该一直发生 - 只是在选中切换按钮时。

有没有可能?我无法通过设置 setModal(true/false) 解决问题,这只允许我以模态方式启动它,切换按钮并将其设置为非模态,但是我无法返回模态。

这里有一些代码:

开始对话:

从主窗口:

_dialog = new ToggleModalDialog(this, id, this);
_dialog->setWindowModality(Qt::ApplicationModal);
_dialog->open();

在 ToggleModalDialog 的切换槽中

void ToggleModalDialog::changeModality(bool checkState)
{
    if(checkState)
    {
        this->setWindowModality(Qt::NonModal);
        ui->changeModalityButton->setChecked(true);
        this->setModal(false);
    }
    else
    {
        this->setWindowModality(Qt::ApplicationModal);
        ui->changeModalityButton->setChecked(true);
    }

提前致谢!

【问题讨论】:

    标签: c++ qt qdialog modality


    【解决方案1】:

    您可以使用QDialog::setModal(bool)setWindowModality(Qt::ApplicationModal)。但是setWindowModality() 的文档说明了一些额外的内容..

    Changing this property while the window is visible has no effect;
    you must hide() the widget first, then show() it again.
    

    所以你的代码应该如下所示..

    void ToggleModalDialog::changeModality(bool checkState)
    {
        if(checkState)
        {
            this->setWindowModality(Qt::NonModal);
            ui->changeModalityButton->setChecked(true);
        }
        else
        {
            this->setWindowModality(Qt::ApplicationModal);
            ui->changeModalityButton->setChecked(true);
        }
    
        this->hide();
        this->show();
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 2011-09-30
      • 2010-10-04
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      相关资源
      最近更新 更多