QML与c++交互学习笔记(八) qt c++直接调用QML中的函数, 直接设置属性

来源:互联网 发布:c和a的算法 编辑:程序博客网 时间:2024/05/21 09:00

1.这里主要是介绍,如何在c++中调用QML中的函数和设置QML中的属性的问题


2.具体代码



// UICtest.qmlimport Qt 4.7Rectangle {    id: mainWidget;    width: 640    height: 480    function callbyc(v)    {        mainWidget.color = v;        return "finish";    }    Rectangle{        id: secondRect;        x: 100;        y: 20;        width: 400;        height: 300;        Rectangle{            x: 10;            y: 20;            width: 30;            height: 40;            color: "#FF035721"            Text  {                objectName: "NeedFindObj";                anchors.fill: parent;                text: "";            }        }    }}


// main.cpp#include <QtGui/QApplication>#include <QtDeclarative/QDeclarativeView>#include <QtDeclarative/QDeclarativeEngine>#include <QtDeclarative/QDeclarativeComponent>#include <QtDeclarative/QDeclarativeContext>#include <QtDeclarative/QDeclarativeItem>#include <QMetaObject>int main(int argc, char *argv[]){    QApplication a(argc, argv);    QDeclarativeView qmlView;    qmlView.setSource(QUrl::fromLocalFile("../UICtest/UICtest.qml"));    qmlView.show();    // 获取根节点,就是 QML idmainWidget的节点    QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(qmlView.rootObject());    item->setProperty("color", QVariant("blue"));    // 查找到我们需要的节点根均objectname NeedFindObj 来获得,并设置他的文本属性    QDeclarativeItem *item1 = item->findChild<QDeclarativeItem *>("NeedFindObj");    if (item1)    {        item1->setProperty("text", QVariant("OK"));    }    // 调用QML中的函数, 分别是 函数所在的对象, 函数名,返回值, 参数    QVariant returnVar;    QVariant arg1 = "blue";    QMetaObject::invokeMethod(item, "callbyc",                              Q_RETURN_ARG(QVariant, returnVar),Q_ARG(QVariant, arg1));    qDebug(" %s",returnVar.toString().toLocal8Bit().data());    return a.exec();}





说明:

这里的根节点是idmainWidget的矩形元素,那么在C++中获取根节点后就可以,直接的设置他的属性了。其他属性也可以同样,调用指定节点内的函数是通过QMetaObject中的invokeMethod 来进行调用的。


最后所有关于QMLc++交互部分就基本写完,如果想要更多的东西,或者一些其他方法,强烈看看

http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html,或者帮助文档,(究竟是不是我的文档里面没有还是怎么的)


原创粉丝点击