Как я могу изменить графические виджеты Qt в QMainWindow из QThread, который является членом? - PullRequest
1 голос
/ 15 июля 2009

Моя основная форма сделана из Qt Designer и унаследована от QMainWindow и пользовательского интерфейса. Мне нужно, чтобы другие потоки работали, и мне нужны эти потоки, чтобы изменить вещи в главной форме, например, индикаторы выполнения, ЖК-дисплеи.

Как мне предоставить другому потоку доступ к виджетам в главной форме?

Спасибо за любую помощь.

Ответы [ 2 ]

3 голосов
/ 15 июля 2009

Как уже упоминал Флавиус Сучу, вы можете использовать перекрестное соединение сигнал / слот. Они также могут содержать аргументы, однако, если вы не передаете в качестве параметров сигнала только фундаментальные типы или типы Qt, а, скажем, свой собственный struct, вам нужно сообщить о них Qt следующим образом:

namespace MyNamespace { // if any...
    struct MyClass { /* ... */ };
} // if any
Q_DECLARE_METATYPE( MyNamespace::MyClass )

Это позволяет вставлять MyClass в QVariant с, что Qt использует внутри для отправки копий аргументов сигнала через границы потоков.

Вам также может понадобиться позвонить

qRegisterMetaType<MyNamespace::MyClass>();

где-то это должно быть выполнено до того, как будет предпринято какое-либо соединение между потоками сигнала / слота (например, в main() или в конструкторе подкласса QThread).

См. Документы Q_DECLARE_METATYPE

3 голосов
/ 15 июля 2009

Использование сигнала / слотов. Trolltech представляет из 4.x многопоточный механизм сигнализации для использования, например, Параметр Qt :: BlockingQueuedConnection в функции connect ().

Подробнее см .: http://lists.trolltech.com/qt-interest/2007-03/thread00260-0.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...