Я пытаюсь определить, как работает вызов слотов 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, является приемлемой практикой.