Как вы используете Q_INVOKABLE для доступа к функциям C++ в QML?
Я ищу самый простой и прямой пример.
С моей стороны;
.час
public:
KTerminalDisplay(QQuickItem *parent = 0);
~KTerminalDisplay();
Q_INVOKABLE void setFontStyle(QString & s);
.cpp
void KTerminalDisplay::setFontStyle(QString & s){
m_fontStyle = QString(s);
}
Это работает отлично до сих пор. Без вопросов. Вопрос в том; Как я могу использовать эту функцию в файле QML?
1 ответ
Решение
Чтобы сделать KTerminalDisplay
экземпляр доступен из QML, вы должны зарегистрировать его в своем main.cpp
, Поскольку вы ожидаете, что parent будет QQuickItem, ваш вопрос не так прост. Посмотрев на приложение терминала, я могу предложить следующий трюк:
QQuickItem *item = view.rootObject();
KTerminalDisplay * display = (KTerminalDisplay *) item;
view.engine()->rootContext()->setContextProperty("kdisplay", display);
После регистрации вы можете позвонить setFontStyle
из QML:
kdisplay.setFontStyle("foo")
Примечание. См. Внедрение объектов C++ в QML с помощью свойств контекста, поскольку вы можете пометить свой метод как слот.
Источник: http://developer.nokia.com/community/wiki/Calling_Qt_class_methods_from_QML