私は 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);
}
前もって感謝します!