2016-05-27 15 views
0

ボタンを押すと、QDialog(名前はqds)を作成するMainwindowがあります。 メインウィンドウを閉じると、QDialogも閉じられます。しかし、メインウィンドウを閉じると、QDialogはまだ開いていて、アプリケーションはまだ実行されています。 これは、メインウィンドウのデストラクタです:MainWindowからQDialogを閉じる

MainWindow::~MainWindow(){ 
    if(qds) delete qds; // this is the QDialog 
    // ...other code 
} 

QDは、メインウィンドウの子ではありません。 私は、メインウィンドウのコンストラクタで

setAttribute(Qt::WA_DeleteOnClose); 

を置くことをしてみましたが、それは、セグメンテーションフォール(ダブル無料)を生成します。

+0

'setAttribute(Qt :: WA_DeleteOnClose);ケースで' delete qds; 'を削除しましたか? – LogicStuff

+0

@LogicStuffええ、それは同じです – CodeBott

+0

ダイアログをどのように作成するのかコードを表示してください。 – demonplus

答えて

3

非モーダルダイアログが起動され、ポインタがメインウィンドウ オブジェクトにあります。これは、メインウィンドウを閉じている間、アプリケーションが終了するのを防ぎます。それを修正するには?

アプリケーションイベントループには、「回転する」オブジェクトが多くなくても問題は解決します。私は他のウィジェット 'this'ポインタがコンストラクタ 'detached'を介して渡されていないウィジェットをすべて呼び出します。しかし、我々はまだそれらを追跡することができます。私は 'デタッチされた'ウィジェットのリストを使用しますが、クラスメンバー変数ポインタだけで十分です。

+0

ええ、あなたは正しく動作します!ありがとうございました。 – CodeBott

+0

うまくいってうれしく、あなたも答えを受け入れるかもしれません。 – AlexanderVX

関連する問題