Вызов функции QObject из QML между потоками

Я пытаюсь определить, как работает вызов слотов QObject или методов Q _INVOKABLE из QML для QObject, который живет в другом потоке, и безопасно ли это делать.

Предположим, что есть MainThread и ThreadA. QObjectA живет в ThreadA. Движок QML/графический интерфейс/все находится в MainThread. Я подвергаю QObjectA движку QML, используя

declarativeView->setContextProperty("someObj",ObjectA)

Теперь в файле QML я вызываю

someObj.someMethod();

Где someMethod — это слот или Q _INVOKABLE. Я хотел бы знать, какой поток фактически выполняет функцию. Если это MainThread, это было бы плохо, и вызов такого метода между потоками был бы опасен. Однако если бы это выполнялось ThreadA, все было бы хорошо.

На основании этой документации:http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html, я предполагаю, что QMetaObject ::invokeMethod ()используется для вызова функции QObject. Эта документация(http://doc.qt.nokia.com/4.7-snapshot/qmetaobject.html#invokeMethod), показывает, что доступны разные типы соединений, как и в случае с сигналами и слотами Qt.

Я хотел бы знать, автоматически ли механизм Qt qml выбирает правильный тип для ситуации при вызове методов C++ из QML между потоками, и если да, то вызов методов для объектов, которые живут в других потоках из QML, является приемлемой практикой.

8
задан Prismatic 20 August 2012 в 00:19
поделиться