您的位置:首页 > 编程语言 > C语言/C++

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

2013-09-23 14:57 651 查看
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 来进行调用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: