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 而不是纯小部件,所以我不需要运行 QApplication 循环,因为正如@Archie 在评论中所说:模态对话框内部包含自己的循环。

博客上的更多细节

于 2013-10-20T09:37:12.353 回答