c++中调用QML中的函数和设置QML中的属性的问题

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

 

 

2.具体代码

 

 

 

 

// UICtest.qml

import Qt 4.7

Rectangle { 

    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中 id是mainWidget的节点

    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();

}

 

 

 

 

 

 

 

 

说明:

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

 

 

https://blog.csdn.net/weixin_37459951/article/details/68067881

posted @   imxiangzi  阅读(159)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示