在非qt应用程序中的方法内创建QApplication

时间:2013-10-19 16:18:18

标签: qt qtgui

我有一个更大的应用程序,我想为一个特定的子任务创建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

实现这一目标的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

解决。

我已经将QApplication的智能指针作为该类的成员,并确保它只创建一次。

我现在使用QDialogs代替纯Widgets,所以我不需要运行QApplication循环,因为@Archie在评论中说:模态对话框里面包含自己的循环。

有关blog

的更多详情