Как я могу изменить модальность QDialog во время выполнения?
У меня есть 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);
}
Заранее спасибо!
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();
}