我开发了一个基于Gtkmm的应用程序,可以通过插件机制扩展。 每个插件都必须定义一个show()方法
void MyExtension::show()
{
// here the code of the extension
}
我正在尝试开发一个使用Qt小部件的插件。我是Qt的新手,但我尝试了以下简单的代码:
void MyExtension::show()
{
int argc = 1;
char argv1[] = "myapp";
char* argv[] = { argv1, NULL };
QApplication app(argc, argv);
QMessageBox::question(NULL, "title", "what?", QMessageBox::Yes|QMessageBox::No);
app.exec();
app.exit();
}
此源代码构建完美,插件的第一次执行正常(显示对话框),但在第一次执行插件后,QApplication似乎扰乱了GTK事件循环。我收到这样的消息:
Gtk-CRITICAL **: IA__gtk_container_add: assertion `GTK_IS_CONTAINER (container)' failed
Gtk-CRITICAL **: IA__gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed
并且应用程序在第三次或第四次执行插件时完全崩溃。
有任何想法用Qt小部件开发插件(=运行时加载的共享库),并插入Gtkmm应用程序? 非常感谢。