Как вы используете 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

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