如果你想开发插件,qt存在一个大问题。如果宿主应用程序是非qt应用程序(很多程序...),并且您想要添加2或3个GUI插件,那么您遇到了很大的麻烦(就像我一样)。
问题是,在一个进程中必须只有1个QApplication。 (通常主要发生) 如果你编写一个插件,你不能用QApplication.exec()锁定宿主应用程序。
在这种情况下,您可以在run()函数中使用QApplication和exec创建一个QThread。 它会正常工作。但是这个不能解决原来的问题。你的第二个插件不能有QApplication ...因为主机进程有一个。 (将Qapplication指针分配给共享内存不是一种选择......因为QWidget必须在GUI线程上创建......总是有一个......)
对于你的问题,这里是答案。如果你只想创建一个插件,你可以使用QMetaObject :: invokeMethod 这段代码将一个pixmap设置为标签并更新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插件),请写信给我。
来源
2011-07-15 12:41:36
Tom
你可以请给我一些代码片段,可以帮助。 – 2009-10-02 09:13:00