2010-11-30 18 views
2

Qtを使用してUIをビルドしています。メインアプリケーションウィンドウの前にダイアログウィンドウを表示する必要があります。そうですね。私が持っているもの はかなり単純メインです:終了時にQtアプリケーションがハングアップする(QDialog exec後)

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    IView *view = new QtView(); 
    view->showView(); 
    int rc = a.exec(); 
    std::cout << "exit" << std::endl; 
    return rc; 
} 

QtViewクラスがたIViewインタフェースの具体的な実装です。 メインウィンドウインスタンスとQDialogインスタンスもあります。それが正常に動作します

void QtView::showView() 
{ 
    this->_configDialog->exec(); 
    this->_mainAppWindow->show(); 
} 

、ダイアログが開き、ユーザーが[OK]をクリックすると、execが戻り、メインウィンドウが表示されます。これは私が持っているものである[表示] - > SHOWVIEW()メソッドをint型。問題は、メインウィンドウを終了するとゾンビプロセスが発生し、すべてのウィンドウが閉じているにも関わらずアプリがハングアップしているように見えることです。 私は何が間違っているのか分かりませんが、ダイアログを閉じるために十字をクリックしても、メインウィンドウが開き、一度閉じると全体がちょうどそこにハングアップしても同じresutlが得られます。

誰かがアドバイスをいただければ、それはクールです。おかげさまで

答えて

2

私は私の問題を修正しました。 QDialogのaccept/rejected/finished(int)シグナルを使用して、メインのアプリケーションウィンドウの表示スロットをトリガーし、ダイアログが受け入れられた場合に表示します。とにかく助けてくれてありがとう。

0

私はこの動作の考えられる理由は、設定ダイアログに親ウィジェットが設定されていない可能性があると思います(コードの関連部分を引用していないので、盲目的な推測です)。これは、デフォルトでQApplicationが終了するのは、親なしのウィンドウがすべて終了したときだけです。ダイアログはウィンドウではなく、技術的にはQt :: WindowではなくQt :: Dialogウィンドウタイプを持っています。つまり、クローズされた「孤立した」ダイアログは、アプリケーションが自動的に終了するのを妨げます。

解決策はありますか? は、ダイアログに親を与えるか、Qtのを可能にどちらか:: WA_QuitOnClose属性を:

this->_configDialog->setAttribute(Qt::WA_QuitOnClose); 
+0

どちらも機能しません。私がこの - > _ configDialog - > show()を使用する場合、アプリケーションを終了しますが、これを使用しないとき - > _ configDialog - > exe(); ダイアログに親を設定しても、違いはありません。アプリケーションが終了する唯一の方法は、メインウィンドウでclose()メソッドが呼び出された場合です。 – dotminic

関連する問題