在没有 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 运行程序吗?