А где можно почитать про то как писать гибридные приложения..
В С++ я создал класс и зарегистрировал его
qmlRegisterSingletonType("SuperGame.personage", 1, 0, "SuperGame",sPersone);
В Qml без проблем я могу получить доступ к объекту
import SuperGame.personage 1.0
..
SuperGame.test("Hello") // Выведет Hello в дебаг
..
Вопрос как вызвать эту функцию(SuperGame.test("Hello")) с файла js(У меня там хранятся вспомогательные "глобальные" функции)
И возможно ли получить доступ из одного файла js к данным другого js скрипта? У меня есть два файла js. Один с функциями, а второй с массивом строк
+ последний вопрос. У меня в qml есть функция void updateUI(void). Она обновляет показатели денег итд... Можно ли ее вызвать из С++?
Ем наверное я так и не понял как правильно писать программы на qml.. Не нашел ничего про регистрации функций в js скриптах.
Пока что использовал костыль.
gameDb.js
.pragma library
var globalFunctions = {}
RGame.qml
import "../js/gameDb.js" as DB
...
QtObject{
id: gameFunction
function testPrint(){
SuperGame.test("Hello")
}
Component.onCompleted: {
DB.globalFunctions.test = gameFunction.testPrint
}
}
...
Никогда особо не погружался в Qt, но раз все молчат...
http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html - тут предельно конкретно расписано, как это все делать.
Доступ к QML происходит через получение корневого элемента, далее доступны все прелести вроде поиска дочерних элементов по имени. Доступ к полям - очень прост, а для вызова методов нужно приводить объект через qobject_cast, при этом проверка сигнатур будет на этапе компиляции.
Даже почти классический invoke доступен, со своеобразным маршаллингом типов...
Спасибо. Во всем разобрался. Шурша по гулу и документации нашел много чего интересного и полезного (Что не описывал шлее и https://qmlbook.github.io).
Отправить комментарий