7

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

4

0 回答 0