问题标签 [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 投票
5 回答
4638 浏览

qt - 如何从类名中找到 Qt 元对象实例?

给定类名,有没有办法找到类的 QMetaObject 实例?我喜欢做的是从磁盘加载对象,但要做到这一点,我需要一种使用类名检索 QMetaObject 实例的方法,以便使用 QMetaObject 创建实例。

0 投票
2 回答
1693 浏览

c++ - 没有要调用的匹配函数 - 编译器说当调用是 (QObject *) 时我调用 (QObject *&)

这是代码:

这是错误:

我错过了什么?我invokeMethod()用指针调用,但编译器抱怨它是指针引用。

0 投票
1 回答
646 浏览

c++ - 来自 QMetaProperty 的类名

我正在制作自己的设计器小部件,其外观和功能都类似于 qt。但现在我需要知道该属性是如何创建的。我知道我们可以使用获取小部件的属性,QMetaObjectQMetaProperty我的问题是我能否获取每个属性的类名。就像对象名称属性来自QObject和几何属性来自QWidget。是这样我应该硬编码自己建模还是有办法从属性中获取classInfo。我已附上我试图实现任何响应或相关帖子的图像。

谢谢, 在此处输入图像描述

0 投票
1 回答
405 浏览

qt - 如何使用 QObject 派生类实例遵循 OOP 基本概念?

大家好...我使用 Qt 的时间不长,但最近我想到了一个想法。 QObject具有公共函数children()和其他一些函数,它们返回指向子对象的指针。所以自定义类的任何客户端都可以打破封装

  1. 如何保护我的代码免受这种野蛮对待?

  2. 为什么 Qt 开发人员将这些功能留在公共部分?他们试图达到什么目的?

我能想象到的关于此类函数的唯一一个论点与 Qt 中的“垃圾收集”有关(当一个删除父QObject派生类实例时,所有子实例都会被自动删除)。但我认为这可以通过 Qt 的metaObject系统来完成(我不确定机制,但是,在我看来,对子对象的访问不应该是公开的)。

  1. 另外,考虑当有人试图在单独的线程中使用子对象时的情况,这在 Qt 中是被禁止的......但我没有看到使用QObject::children().

//------------------------------------------------ ------------------------------------------------

根据一些评论进一步解释:

虽然您可以访问QObject::children()班级的私人成员,例如

无需将成员 m_lbl1 声明为私有成员:

这是非常糟糕的。因为如果您的解决方案中至少有 10^5 行代码并且超过 1 个开发人员,迟早有人可以手动更改任何子成员的状态MyClass,您可以实现任何类型的错误(例如,根据实施MyClass)。

@Merlin069:pImpl 是 Qt 开发中的常用方法吗?

0 投票
1 回答
195 浏览

c++ - 在 Qt C++ 中枚举 QML 属性?

我正在执行以下操作以在我的 Qt 嵌入式应用程序中呈现 QML:

有没有办法可以枚举根项中定义的所有属性值?

例如,如果我有 QML:

是否有一个 Qt 方法最终会让我拥有这些字符串的列表:

我试过,以下,但它的列表是空的:

提前致谢!

0 投票
1 回答
720 浏览

c++ - 使用 QMetaProperty 进行自省

我有一堂课ObjectA

和班级ObjectB

我想做一个这样的信号/插槽连接

只知道名称的属性。

但是

metaPropertyA.notifySignal().methodSignature()

不返回函数的指针,我也不知道如何获取 set 方法指针。

0 投票
1 回答
287 浏览

c++ - Q_PROPERTY WRITE 获取索引

我有这个属性:

我只知道物业的名称_a。我想得到方法的索引setA

0 投票
3 回答
1912 浏览

qt - 编译器错误 C2248:'QObject::Qobject':无法访问在类 'QObject' 中声明的私有成员

大家好,我有一个 foo 课

foo.h 中的代码

现在这工作和编译正常,但我想使用 QSettings 保存这个自定义 c++ 类,其中一个步骤是注册你的类Q_DECLARE_METATYPE

因此,只要我将此行 Q_DECLARE_METATYPE(Foo) 放在 foo.h 文件的末尾,我就会得到这些编译器错误 C2248:'QObject::Qobject':cannot access private member 在类'QObject'中声明,单击时只会带我去我的 connection.h 头文件的最后一行,并且没有提供关于可能出现什么问题的其他信息,即错误指向我

我知道 QObject 不能被复制,这与它有关,但我不知道这里可能有什么问题以及如何纠正它。提前致谢

0 投票
0 回答
283 浏览

qt - 尝试使用 QSettings 序列化 QObject 类时读取访问冲突

大家好,我有一个继承自 QObject 的 foo 类,我想使用 QSettings 进行序列化。foo.h 中的代码

Foo.cpp 中的代码

main.cpp 中的代码

现在编译正常但是当我调试它时,我得到异常触发的读取访问冲突

需要注意的重要一件事是,如果我将朋友功能更改为

我确实在 var1、var2 和 var3 中得到了正确的值。

有人可以告诉我我做错了什么,我该如何纠正它提前谢谢

0 投票
1 回答
1091 浏览

c++ - Qt metaObject->indexOfMethod 总是返回 -1

我在Foo课堂上声明了一个函数:

Q_INVOKABLE void setImageUrl(const QString &imageUrl);

但是我无法获得该方法的功能索引:

我错过了什么?