如何使用 Q_INVOKABLE 访问 QML 中的 c++ 函数?

如何使用 Q_INVOKABLE 访问 QML 中的 c++ 函数?

我正在寻找最简单、最直接的例子。

对我来说;

。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

要使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

相关内容