Как Вы используете Q_INVOKABLE для доступа к функциям C++ в QML?

Я ищу самый простой и простой пример.

С моей стороны;

.h

public:
KTerminalDisplay(QQuickItem *parent = 0);
~KTerminalDisplay();
Q_INVOKABLE void setFontStyle(QString & s);  

.cpp

void KTerminalDisplay::setFontStyle(QString & s){
m_fontStyle = QString(s);
}

Это хорошо работает к настоящему времени. Никакие проблемы. Вопрос; как я использую эту функцию в файле QML?

1
задан 22 September 2014 в 12:58

1 ответ

Для создания KTerminalDisplay экземпляр доступный от QML необходимо зарегистрировать его в Вашем main.cpp. Так как Вы ожидаете, что родителем будет 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

1
ответ дан 11 November 2019 в 12:35

Другие вопросы по тегам:

Похожие вопросы: