问题标签 [qmetaobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Qt 属性中的枚举
我有一个代码,它适用于Qt 5.5而不适用于Qt 5.2。问题在于这个枚举:
然后我有一个对象,它公开了这个area属性:
和 main.cpp:
它编译,一切正常。但是当我尝试在qml中使用 area 属性时:
如果使用 Qt 5.2(Linux,x64),我有运行时错误:
QMetaProperty::read:无法处理属性“MyClass::area”文件的未注册数据类型“Area”:///home/yech844/devel/test_qml/main.qml:10:24:无法将 [undefined] 分配给 int QMetaProperty::read:无法处理属性“MyClass::area”文件的未注册数据类型“Area”:///home/yech844/devel/test_qml/main.qml:10:24:无法将 [undefined] 分配给 int
这是Qt中的错误吗?为什么我不能使用声明在 Class 范围之外的 Enum?
c++ - 如果类型在命名空间中,QMetaObject::newInstance 会失败
我想创建一个新的类实例,A
它继承从QObject
.
如果A
不在命名空间中,这可以正常工作,但如果A
在命名空间中,则此调用返回一个空指针:
本身返回正确的metaObject
类名(包括命名空间)
的构造函数用A
标记Q_INVOKABLE
。如何使用QMetaObject::newInstance
命名空间?
c++ - Qt4.8:为什么在 qmetaobject 中没有看到枚举?以及如何工作?
定义“功能”我无法重构。但需要在测试类中使用。使用 Qt 4.8。以下代码返回 1,但预期为 2。
如何在测试类中使用 typedef 枚举?
qt - Qt - 派生类是否继承其基类的元属性?
我正在使用 Qt 并遇到类层次结构,其中基类(有时是抽象类)包含 Q_PROPERTY 宏;派生类会从其基类继承每个 Q_PROPERTY 吗?
c++ - 有没有办法将 QMetaEnum 与属于非 Q_OBJECT 或 Q_GADGET 类的 Q_ENUMS 一起使用?
例如,我有以下课程:
有没有办法使用 QMetaEnum::valueToKey 或 QMetaEnum::keyToValue ?
尝试了this answer中的方法,但出现以下错误:
我可以使用 X-Macros 来获得我想要的输出,但在 Qt 中学习更多技巧也会很好。
qt - 翻译 Q_ENUM 键
我Q_ENUM
在我的代码中使用宏,然后我使用关联QMetaEnum
来填充QComboBox
.
是否有任何“标准”方法来管理Q_ENUM
密钥的翻译(用方法检索QMetaEnum::key()
)?
我在 Qt 的文档中没有找到任何内容,主要问题是在 *.ts 文件中自动为 .ts 的所有键添加翻译键Q_ENUM
。
谢谢
c++ - Qt的元系统真的那么乏味吗?
我想使用 Qt 的反射机制,因为 C++ 缺少这个特性。它似乎工作,但调用所有的宏和辅助函数是非常乏味的。例如,要将枚举注册为适当的元类型,我必须完成以下所有步骤:
- 在包含
Q_GADGET
宏的包装类中声明一个枚举。 Q_ENUM
之后使用宏注册枚举。- 注册包含枚举的类:
Q_DECLARE_METATYPE(MyClass)
- 调用
qRegisterMetaType<..>()
包装类的类型和每个声明的枚举。
现在我知道,如果不需要完整功能的一部分,可以省略一些步骤。但这不是我想要的,我需要在信号中使用枚举,并且我需要能够获取信号的元方法并查询它的参数类型。
但我仍然不禁想到必须有更好/更简单的方法来做到这一点。
c++ - 在带有 Qt5 的对象指针上使用 qRegisterMetaType 会引发未解决的错误
我目前正在将我的应用程序从 Qt4.8 移植到 Qt5.6
一些用于编译和链接的代码现在停止正确链接。我把它缩小到调用qRegisterMetaType<MyClass*>
MyClass* 从 QObject 继承的地方。
MyClass 在单独的插件中定义和实现。因此,在这种情况下,我只是将“MyClass.h”包括在内,其中我有一个Q_DECLARE_METATYPE(MyClass*)
它曾经与 Qt4.8 完美配合,但与 Qt5.6 配合使用,但现在无法链接:
Qt5 发生了什么变化?我做错了吗?
c++ - 从元对象获取属性更改通知
我想编写一个属性连接器,用于以 QML 方式连接 C++ Qt 中的属性。它可能是这样的:
propConnector 类是一个小型 QObject 类,它使用发送者作为父类,侦听属性更改的信号并设置接收者的适当属性。像这样:
唯一的问题是,我怎样才能找到我想听的属性名称的正确信号名称?我想,这是可能的,但我直到现在才通过阅读元对象文档找到答案。
编辑:在凯文的建议下,我能够实施该课程。
propconnector.h
propconnector.cpp
c++ - 从 QT 中的 Q_PROPERTY 序列化嵌套的用户定义类
面临以下问题:我无法从 Q_PROPERTY 序列化用户定义的对象我尝试将 RegistersSettings 类序列化为 QDataStream。这个想法是能够将其序列化为文本文件(使用 << 运算符),然后能够读取它(使用 >> 运算符)。它应该验证从文件中读取的字段是否仍然有效。所以我为此检查财产。问题是 Q_PROPERTY(QList groups MEMBER groups) 没有按预期工作。看起来可以创建这样的功能,但看起来并不那么容易。任何人都可以帮助如何从 Q_PROPERTY 序列化用户定义的类的常用方法吗?
代码被简化为更具可读性,但主要思想已经到位。
SettingsItem 是统一的助手