我有一个更大的应用程序,我想为一个特定的子任务创建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
实现这一目标的正确方法是什么?
答案 0 :(得分:1)
解决。
我已经将QApplication的智能指针作为该类的成员,并确保它只创建一次。
我现在使用QDialogs代替纯Widgets,所以我不需要运行QApplication循环,因为@Archie在评论中说:模态对话框里面包含自己的循环。
有关blog
的更多详情