Доступ к Qt API из JavaScript с помощью QJSEngine

Я использую QJSEngine сделать приложение сценарием. Я бы хотел, чтобы сторона JavaScript могла изменять пользовательский интерфейс. Моя главная проблема сейчас — доступ к API Qt из JavaScript.

Для создания виджетов я добавил createWidget() обертка, которая использует QUILoader:

// JavaScript
var w = helpers.createWidget("QPushButton");

// C++
QJSValue helpers::createWidget(QString type)
{
QUILoader ld;
return engine.newQObject(ld.createWidget(type));
}

Я также зарегистрировал все перечисления из qt_getQtMetaObject()который, кажется, заботится обо всех перечислениях уровня пространства имен от qnamespace.h, Похоже, это не часть публичного API.

Я действительно должен это делать вручную или мне чего-то не хватает? Разве нет registerAllTheThings() функция, которая создает глобальный Qt объект, через который доступен Qt API?

Если нет, то у меня проблема. Я могу создать QWidgetс QUILoader, но я не смог найти способ создания других объектов, таких как QStandardItemModel. Я думал, что все классы Qt уже будут зарегистрированы через qRegisterMetaType(), но они не QMetaType::type("QStandardItemModel") не возвращается UnknownType, Снова, я пропускаю некоторый вызов функции инициализации, который регистрирует все?

0

Решение

Я бы порекомендовал использовать QQmlEngine вместо QJSEngine,

Is является производным от QJSEngine, поэтому он может делать те же вещи, в том же модуле, поэтому никаких дополнительных зависимостей.

Он предоставляет простой способ регистрации типов для создания экземпляров в QML, имеет механизм загрузки плагинов (импорт) и т. Д.

Я представил это как часть моего выступления на Qt World Summit 2015: https://www.youtube.com/watch?v=7LsKoVrb8C8

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]