在没有 Q_PROPERTY 定义的情况下从 C++ 访问 QML 对象的属性

Posted

技术标签:

【中文标题】在没有 Q_PROPERTY 定义的情况下从 C++ 访问 QML 对象的属性【英文标题】:Accessing properties of QML objects from C++ withoun Q_PROPERTY definition 【发布时间】:2011-05-17 15:47:07 【问题描述】:

我知道,可以定义一个带有自定义属性的 QObject 并在 QML 环境中公开这个对象。但这样一来,对于每个新属性,我都需要重新编译 C++ 代码。

是否有可能进行从 C++/Qt 到 QML 对象的动态绑定? 比如:

//C++ code: 
updateProperty("myQmlObject.any_property", "Hello World");

谢谢!

已解决:

_view->rootContext()->setContextProperty( "cppmessage" , "Hello from C++" );

WHERE:view 是一个 QDeclarativeView,cppmessage 在 QML 中使用,没有事先声明,例如:“text: cppmessage”

此链接对于找到解决方案很有用:http://xizhizhu.blogspot.com/2010/10/hybrid-application-using-qml-and-qt-c.html

【问题讨论】:

【参考方案1】:

是的,这可以做到。 Link

// MyItem.qml
import QtQuick 1.0

Item 
    property int someNumber: 100


//C++
QDeclarativeEngine engine;
QDeclarativeComponent component(&engine, "MyItem.qml");
QObject *object = component.create();

qDebug() << "Property value:" << QDeclarativeProperty::read(object,"someNumber").toInt();
QDeclarativeProperty::write(object, "someNumber", 5000);

qDebug() << "Property value:" << object->property("someNumber").toInt();
object->setProperty("someNumber", 100);

编辑:1 此处列出了@Valentin 建议的另一种方法 link

【讨论】:

感谢您的回答。悬停我发现,它似乎很容易:setContextProperty。还是谢谢你! 我想这也是另一种方法,我会将其添加到答案中。

以上是关于在没有 Q_PROPERTY 定义的情况下从 C++ 访问 QML 对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

JSF:在没有自定义消息的情况下从验证消息中删除客户端 ID(标签、组件 ID)

在没有 libreoffice 的情况下从 word 创建 pdf

在没有第三方库的情况下从 JSON 获取动态对象的最佳方法是啥?

我可以在没有提升权限的情况下从 Visual Studio 运行程序吗?

如何在没有 IBOutlet 或标识符的情况下从 Storyboard 更新约束?

目标 C:如何在不损失边缘质量的情况下从 JPG 图像中去除白色背景