0

より大きなアプリケーションがあり、特定のサブタスク用の GUI ダイアログを作成したいと考えています。Qt を使用することにしましたが、慣れていないため、おそらく間違った方法でこのことを行っています。

私の手っ取り早いプロトタイプ:

void ManualFeatureMatcher::matchFeatures() {
    int argc = 0;
    char* argv[1] = {NULL};
    QApplication a(argc, argv);
    Widget w;
    w.show();
    a.exec();
}

これは、関数が初めて呼び出されたときに正常に機能しますが、再度呼び出すと、次のエラーが発生します。

    (app:8540): Gtk-CRITICAL **: IA__gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed

    (app:8540): Gtk-CRITICAL **: IA__gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed

    (app:8540): Gtk-CRITICAL **: IA__gtk_container_add: assertion `GTK_IS_CONTAINER (container)' failed

    (app:8540): Gtk-CRITICAL **: IA__gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed

これを達成する正しい方法は何ですか?

4

1 に答える 1

1

解決しました。

QApplication へのスマート ポインターをクラスのメンバーにし、一度だけ作成されるようにしました。

純粋なウィジェットの代わりに QDialogs を使用するようになったので、@Archie がコメントで述べたように、モーダル ダイアログには独自のループが含まれているため、QApplication ループを実行する必要はありません。

詳しくはブログにて

于 2013-10-20T09:37:12.353 に答える