QtQml模块提供的C++ API

来源:互联网 发布:程序员要出差吗 编辑:程序博客网 时间:2024/05/22 00:51

QtQml模块提供了一些C++ API,可使用“#include <QtQml>”声明,或者“#include <QtQml/xxx>”单独声明,pro文件中添加“QT += qml”


QJSEngine:提供了JavaScript代码求值环境。

    QJSEngine myEngine;    QJSValue three = myEngine.evaluate("1 + 2");    qDebug() << three.toNumber() << endl; // 3    qDebug() << three.toString() << endl; // "3"

QJSValueQt/JavaScript数据类型容器。

    QJSEngine myEngine;    QJSValue myObject = myEngine.newObject();    QJSValue myOtherObject = myEngine.newObject();    myObject.setProperty("myChild", myOtherObject);    myObject.setProperty("name", "John Doe");    qDebug() << myObject.property("myChild").toString() << endl; // "[object Object]"    qDebug() << myObject.property("name").toString() << endl; // "john Doe"

QJSValueIterator:类Java风格的QJSValue迭代器。

    QJSEngine myEngine;    QJSValue myObject = myEngine.newObject();    QJSValue myOtherObject = myEngine.newObject();    myObject.setProperty("myChild", myOtherObject);    myObject.setProperty("name", "John Doe");    QJSValueIterator it(myObject);    while (it.hasNext()) {        it.next();        qDebug() << it.name() << ": " << it.value().toString();    }    // output    // "myChild" : "[object Object]"    // "name" : "John Doe"

QQmlAbstractProfilerAdapter:用于QML分析工具。


QQmlAbstarctUrlInterceptor:控制QML文件加载。


QQmlApplicationEngine:从单个QML文件加载应用程序,结合了QQmlEngineQQmlComponent

    QQmlApplicationEngine engine;    engine.load(QUrl(QStringLiteral("qrc:///main.qml")));

QQmlComponent:封装了QML组件的定义。

    QQmlEngine engine;    QQmlComponent component(&engine, QUrl("qrc:///main.qml"));    component.create();

QQmlContext:定义了QML上下文,使用QQmlContext::setContextProperty()可以把C++中的数据暴露到QML文件中。

    QQmlEngine engine;    MyClass theClass;    engine.rootContext()->setContextProperty("theClass", &theClass); // using “theClass”at main.qml    QQmlComponent component(&engine, QUrl("qrc:///main.qml"));    component.create();

QQmlEngine:提供了实例化QML组件的环境。

    QQmlEngine engine;    QQmlComponent component(&engine, QUrl("qrc:///main.qml"));    component.create();

QQmlError:封装了QML错误信息。


QQmlExpression:在QML上下文中对JavaScript表达式求值。

    QQmlEngine engine;    QQmlComponent component(&engine, QUrl("qrc:///main.qml"));    QObject *object = component.create();    QQmlExpression expr(engine.rootContext(), object, "width * 2"); // width of main.qml is 360    int result = expr.evaluate().toInt(); // result = 720

QQmlExtensionPlugin:作为QML自定义插件的抽象基类。


QQmlFileSelector:在QML文件加载中使用QFileSelector


QQmlImageProviderBase:通常要注册到QML引擎中,访问数据时必须把QQmlImageProviderBase指针转换为QQuickImageProvider指针。


QQmlIncubationController:精准控制QQmlIncubator实例化过程。


QQmlIncubator:异步创建QML对象。

    QQmlEngine engine;    QQmlComponent component(&engine, QUrl("qrc:///main.qml"));    QQmlIncubator incubator;    component.create(incubator);    while (incubator.isReady()) {        QCoreApplication::processEvents(QEventLoop::AllEvents, 50);    }    QObject *object = incubator.object();

QQmlListPropertyQML列表属性。


QQmlListReference:处理QQmlListProperty


QQmlNetworkAccessManagerFactory:为QML引擎创建QNetworkAccessManager实例。


QQmlParserStatus:提供QML解析状态。


QQmlProperty:在C++中访问QML对象属性。

    QQmlEngine engine;    QQmlComponent component(&engine, QUrl("qrc:///main.qml"));    QObject *object = component.create();    QQmlProperty property(object, "width");    qDebug() << "width is" << property.read().toInt() << endl; // width is 360

QQmlPropertyMap:设置key-value对。

    QQmlEngine engine;    QQmlPropertyMap ownerData;    ownerData.insert("name", QVariant(QString("John Smith")));    ownerData.insert("phone", QVariant(QString("555-5555")));    QQmlContext *ctxt = engine.rootContext();    ctxt->setContextProperty("owner", &ownerData);    QQmlComponent component(&engine, QUrl("qrc:///main.qml"));    component.create();    // using owner at qml file    Text { text: owner.name + " " + owner.phone } // shows “John Smith 555-55555”

QQmlPropertyValueSource:属性值源码接口,可以实时更新属性值,语法为<PropertyValueSource> on <property>


QQmlScriptString:封装了脚本内容。


2 0
原创粉丝点击