Существует большая проблема с qt, если вы хотите разрабатывать плагины. Если хост-приложение не является приложением qt (много программ ...), и вы хотите добавить плагин 2 или 3 GUI, у вас большие проблемы (как и у меня).
Проблема в том, что в одном процессе должно быть только 1 приложение QApplication. (Обычно проходит в основном)
Если вы пишете плагин, вы не можете позволить себе заблокировать хост-приложение с помощью QApplication.exec ().
В этом случае вы можете создать QThread с QApplication и выполнить exec в функции run ().
Это будет работать правильно. Но этот не может решить исходную проблему. Ваш второй плагин не может иметь приложение QApplication ... потому что оно есть у хост-процесса. (указатель Qapplication в разделяемую память не подходит ... потому что QWidget должен создавать в потоке GUI ... всегда есть один ...)
А на ваш вопрос вот ответ. Если вы хотите создать только один плагин, вы можете использовать QMetaObject :: invokeMethod
этот код устанавливает растровое изображение для метки и обновляет графический интерфейс.
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();
}
Надеюсь, это поможет.
Если кто-нибудь знает решение моей проблемы ... описанной выше (плагин с несколькими GUI с qt в хост-приложении), пожалуйста, напишите мне.