2017-01-30 12 views
0

私はQt5.7でC++でコーディングしています。私はQDialog exec()の問題に直面しています。私はモーダルでそれが必要なので、私はshow()を使うことはできません。ダイアログが終了して閉じられると、UIは消えますが、ダイアログ変数と関数はまだ実行されています。ダイアログには、ダイアログを閉じた後に送信を続けるシリアルポートにバイトを送信するタイマー機能があります。これとは逆に、show()を代わりに使用すると、これは起こりません。助けてください。Qt exec()を閉じることができません

私は目的のために: QuitOnCloseとDeleteOnCloseのようなテストのために冗長なコマンドを使用します。しかし、意図した通りに動作するものはありません。ダイアログがメインウィンドウ

ダイアログで
wizard = new Wizard(); 
wizard->setAttribute(Qt::WA_QuitOnClose); 
wizard->setAttribute(Qt::WA_DeleteOnClose, true); 
connect(wizard, SIGNAL(closeWizardForm()), this, SLOT(closeWizardForm())); 
wizard->exec(); 

また、

void MainWindow::closeWizardForm() 

wizard->destroyed(); 
wizard = NULL; 

に作成され

、それは

void Wizard::closeEvent(QCloseEvent *event) 

// "x" button clicked 
if (changeMade == true){ 
    // give warning if changes not saved 
    QMessageBox::StandardButton resBtn = QMessageBox::critical(this, "Setup Wizard", tr("Unsaved data will be lost. \r\n" 
                         " Are you sure you want to quit?"), 
                   QMessageBox::Yes | QMessageBox::No, QMessageBox::No); 
    if (resBtn != QMessageBox::Yes){ 
     event->ignore(); 
     return; 
    } 
} 
// continue to quit 
emit closeWizardForm(); 
event->accept(); 
this->close(); 

}

のためにありがとうございましたことにより、閉じあなたの親切な出席者。

SP。

+0

'wizard'はクラスメンバ変数ですか? – vahancho

+1

ダイアログのモダリティは 'show()'を使っているかどうかは関係ありません。あなたは 'show()'を使用し、ダイアログをモーダルに設定する必要があります。シンプル。 –

答えて

0

ここでは、ウィザードオブジェクトを削除した箇所はありません。まだあなたのウィザードのオブジェクトを意味存在

delete wizard; 

を、タイマーがまだ実行されます。どこかで、私が見ることを期待します。私はあなたが "ショー"対 "エグゼクティブ"の場合とは異なる結果を得られるとは思っていませんが、おそらくあなたは両者を切り替える際に何かを変えました。

「破壊された」信号を送信してもオブジェクトが破壊されることはなく、自分で放出しないでください。私はQObjectデストラクタは、あなたがオブジェクトを削除するときにそれを行うと信じています。それが必要だと分かった場合は、おそらくオブジェクトを削除したことがないためです。そのため、QObjectデストラクタは決して呼び出されませんでした。

関連する問題