如果你想开发插件,qt 有一个很大的问题。如果宿主应用程序是非 qt 应用程序(很多程序...),并且您想添加 2 或 3 个 GUI 插件,那么您就有大麻烦了(就像我一样)。
问题是,一个进程中必须只有 1 个 QApplication。(通常发生在 main 中)如果你写一个插件,你不能用 QApplication.exec() 来锁定宿主应用程序。
在这种情况下,您可以在 run() 函数中使用 QApplication 和 exec 创建一个 QThread。它会正常工作。但是这个不能解决原来的问题。您的第二个插件不能有 QApplication ...因为主机进程有一个。(将 Qapplication 指针指向共享内存不是一种选择......因为 QWidget 必须在 GUI 线程上创建......总是有一个......)
对于您的问题,这里就是答案。如果您只想创建一个插件,您可以使用 QMetaObject::invokeMethod 这段代码将像素图设置为标签并更新 gui。
QImage img;...
bool succ = QMetaObject::invokeMethod(mainWin, "DisplaySlot", Qt::QueuedConnection, Q_ARG(QImage, img));
并添加一个公共插槽:到您的显示窗口
void mainWinClass::DisplaySlot(QImage qim) {
(*(ui.label)).setPixmap(QPixmap::fromImage(qim));
(*(ui.label)).update();
}
我希望它有所帮助。
如果有人知道我的问题的解决方案...如上所述(主机应用程序中带有 qt 的多个 gui 插件),请写信给我。