[英]How can I change the modality of QDialog at runtime?
我有一个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);
}
提前致谢!
您可以使用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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.