我有一个QQuickItem类,在QML中使用了一些成员,因此它们声明如下:
Q_PROPERTY (bool myBool MEMBER _myBool NOTIFY myBoolChanged)如果我想访问C++代码中的这个成员(来自另一个类),那么我是否有一个免费的访问器?它的语法是什么?
医生对我不清楚:
如果没有指定读访问器函数,则需要成员变量关联。这使得给定的成员变量具有可读性和可写性,而无需创建读写访问器函数。
这是否使成员仅在QML或C++中可读和可写?
发布于 2018-02-26 10:54:23
Qt不为您生成任何C++ API getter,但是如果您想这样做,则属性值可以是通过元对象系统生成的朗读:
QMetaProperty prop = obj->metaObject()->property(...);
bool value = prop.read(obj).toBool();除非您正在基于元对象系统进行一些通用的工作,否则您可能需要定义一个用于C++的普通getter。Q_PROPERTY的成员关键字不是围绕标准编程实践的快捷方式。
发布于 2018-02-26 10:54:09
Qt 不创建"C++“getter或setter。对于成员,Qt MetaSystem只能直接访问成员变量。
在moc文件中,将使用moc关键字创建类似于此的内容:
Q_PROPERTY(int prop MEMBER m_prop NOTIFY propChanged)
....
else if (_c == QMetaObject::ReadProperty) {
void *_v = _a[0];
switch (_id) {
case 0: *reinterpret_cast< int*>(_v) = m_prop; break;
....使用READ关键字,将在moc文件中创建类似的内容:
Q_PROPERTY(int prop READ getProp NOTIFY propChanged)
...
else if (_c == QMetaObject::ReadProperty) {
void *_v = _a[0];
switch (_id) {
case 0: *reinterpret_cast< int*>(_v) = getProp(); break;
...https://stackoverflow.com/questions/48986373
复制相似问题