问题标签 [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.

0 投票
2 回答
4596 浏览

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?

0 投票
1 回答
881 浏览

c++ - 如果类型在命名空间中,QMetaObject::newInstance 会失败

我想创建一个新的类实例,A它继承从QObject.

如果A不在命名空间中,这可以正常工作,但如果A在命名空间中,则此调用返回一个空指针:

本身返回正确的metaObject类名(包括命名空间)

的构造函数用A标记Q_INVOKABLE。如何使用QMetaObject::newInstance命名空间?

0 投票
1 回答
324 浏览

c++ - Qt4.8:为什么在 qmetaobject 中没有看到枚举?以及如何工作?

定义“功能”我无法重构。但需要在测试类中使用。使用 Qt 4.8。以下代码返回 1,但预期为 2。

如何在测试类中使用 typedef 枚举?

0 投票
1 回答
616 浏览

qt - Qt - 派生类是否继承其基类的元属性?

我正在使用 Qt 并遇到类层次结构,其中基类(有时是抽象类)包含 Q_PROPERTY 宏;派生类会从其基类继承每个 Q_PROPERTY 吗?

0 投票
3 回答
5081 浏览

c++ - 有没有办法将 QMetaEnum 与属于非 Q_OBJECT 或 Q_GADGET 类的 Q_ENUMS 一起使用?

例如,我有以下课程:

有没有办法使用 QMetaEnum::valueToKey 或 QMetaEnum::keyToValue ?

尝试了this answer中的方法,但出现以下错误:

我可以使用 X-Macros 来获得我想要的输出,但在 Qt 中学习更多技巧也会很好。

0 投票
1 回答
180 浏览

qt - 翻译 Q_ENUM 键

Q_ENUM在我的代码中使用宏,然后我使用关联QMetaEnum来填充QComboBox.

是否有任何“标准”方法来管理Q_ENUM密钥的翻译(用方法检索QMetaEnum::key())?

我在 Qt 的文档中没有找到任何内容,主要问题是在 *.ts 文件中自动为 .ts 的所有键添加翻译键Q_ENUM

谢谢

0 投票
1 回答
238 浏览

c++ - Qt的元系统真的那么乏味吗?

我想使用 Qt 的反射机制,因为 C++ 缺少这个特性。它似乎工作,但调用所有的宏和辅助函数是非常乏味的。例如,要将枚举注册为适当的元类型,我必须完成以下所有步骤:

  1. 在包含Q_GADGET宏的包装类中声明一个枚举。
  2. Q_ENUM之后使用宏注册枚举。
  3. 注册包含枚举的类:Q_DECLARE_METATYPE(MyClass)
  4. 调用qRegisterMetaType<..>()包装类的类型和每个声明的枚举。

现在我知道,如果不需要完整功能的一部分,可以省略一些步骤。但这不是我想要的,我需要在信号中使用枚举,并且我需要能够获取信号的元方法并查询它的参数类型。

但我仍然不禁想到必须有更好/更简单的方法来做到这一点。

0 投票
1 回答
831 浏览

c++ - 在带有 Qt5 的对象指针上使用 qRegisterMetaType 会引发未解决的错误

我目前正在将我的应用程序从 Qt4.8 移植到 Qt5.6

一些用于编译和链接的代码现在停止正确链接。我把它缩小到调用qRegisterMetaType<MyClass*>MyClass* 从 QObject 继承的地方。

MyClass 在单独的插件中定义和实现。因此,在这种情况下,我只是将“MyClass.h”包括在内,其中我有一个Q_DECLARE_METATYPE(MyClass*)

它曾经与 Qt4.8 完美配合,但与 Qt5.6 配合使用,但现在无法链接:

Qt5 发生了什么变化?我做错了吗?

0 投票
1 回答
524 浏览

c++ - 从元对象获取属性更改通知

我想编写一个属性连接器,用于以 QML 方式连接 C++ Qt 中的属性。它可能是这样的:

propConnector 类是一个小型 QObject 类,它使用发送者作为父类,侦听属性更改的信号并设置接收者的适当属性。像这样:

唯一的问题是,我怎样才能找到我想听的属性名称的正确信号名称?我想,这是可能的,但我直到现在才通过阅读元对象文档找到答案。

编辑:在凯文的建议下,我能够实施该课程。

propconnector.h

propconnector.cpp

0 投票
1 回答
403 浏览

c++ - 从 QT 中的 Q_PROPERTY 序列化嵌套的用户定义类

面临以下问题:我无法从 Q_PROPERTY 序列化用户定义的对象我尝试将 RegistersSettings 类序列化为 QDataStream。这个想法是能够将其序列化为文本文件(使用 << 运算符),然后能够读取它(使用 >> 运算符)。它应该验证从文件中读取的字段是否仍然有效。所以我为此检查财产。问题是 Q_PROPERTY(QList groups MEMBER groups) 没有按预期工作。看起来可以创建这样的功能,但看起来并不那么容易。任何人都可以帮助如何从 Q_PROPERTY 序列化用户定义的类的常用方法吗?

代码被简化为更具可读性,但主要思想已经到位。

SettingsItem 是统一的助手