Как уже упоминал Флавиус Сучу, вы можете использовать перекрестное соединение сигнал / слот. Они также могут содержать аргументы, однако, если вы не передаете в качестве параметров сигнала только фундаментальные типы или типы 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