我开发了一个基于 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 应用程序?非常感谢。