问题标签 [metaobject]

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 投票
4 回答
21577 浏览

grails - 如何获取 Grails 域对象的属性的类型(类)?

我试图在 Grails 中动态创建域对象,但遇到了一个问题,即对于引用另一个域对象的任何属性,元属性告诉我它的类型是“java.lang.Object”而不是预期的类型。

例如:

是域类的开始,它引用另一个域类“站点”。

如果我尝试使用此代码(在服务中)动态查找此类的属性类型:

那么结果是它识别 Java 类,但不识别 Grails 域类。输出包含以下几行:

问题是我想使用动态查找来查找匹配的对象,例如做一个

其中 propertyClass 是通过自省检索的,idName 是要查找的属性的名称(不一定是数据库 ID),idValue 是要查找的值。

这一切都结束于:

有没有办法找到该属性的实际域类?或者,对于查找未给出类型的域类的实例(只有具有该类型的属性名称)的问题,可能还有其他解决方案?

如果我使用类型名称是属性名称大写(“site”->“Site”)的约定来通过 grailsApplication 实例查找类,它会起作用,但我想避免这种情况。

0 投票
1 回答
2245 浏览

qt - QMetaObject 编译器解释?

我想知道 Qt 如何实现元对象编译,这使他们能够在 Qt 中提供信号槽机制。我无法在文档中找到太多详细信息。

编辑::我无法获得源代码_id = QObject::qt_metacall(_c, _id, _a);

以下是源文件和相应的 moc 文件。

还要解释 QObject::connect(ssobj1,SIGNAL(readyToPrint()),ssobj1,SLOT(print())) 如何扩展

0 投票
2 回答
1040 浏览

ruby - Ruby 是否有 Metaobject 协议,如果没有,是否可以实现一个?

请原谅我的无知,但什么是元对象协议,Ruby 有吗?如果没有,是否可以为 Ruby 实现一个?如果 Ruby 拥有一个 Metaobject 协议,它可能拥有哪些特性?

0 投票
5 回答
5757 浏览

unit-testing - Qt 中是否可以对私有方法进行单元测试(访问)?

我正在为我的应用程序编写单元测试,现在我偶然发现了一个我应该在其中测试私有方法的类。这可能是特定课程设计不佳的结果,但我必须这样做。Qt 中是否有任何方法可以调用私有方法,可能使用 QMetaObject 或类似的东西?

对于单元测试,我使用的是 QTestLib 框架。

0 投票
2 回答
423 浏览

multithreading - 使用 QueuedConnection 调用带有数组或参数的方法

我想在其他线程中调用 QObject 的任意槽。

我有:

我想:

我不想做一些事情,比如根据参数的数量复制 invokeMethod 代码。

在哪里获得接受参数数组的调用方法或如何使 qt_metacall 排队?

0 投票
1 回答
2173 浏览

c++ - 如何创建一个继承自 QWidget 的 qt 插件

我只是在阅读有关 QWidgets 的内容,我想创建插件,这些插件是在运行时加载的小部件。当我查看示例代码和需求时,插件似乎继承自接口和 QObject。我将如何创建 QWidget 插件,它们都有不同的按钮和不同的插槽?此外,是否可以创建一个从接口继承的插件和一个从 QWidget 继承的基类(从 QObject 继承)。

http://developer.qt.nokia.com/doc/qt-4.8/plugins-howto.html

但是,我读到了元对象,您可以在运行时加载小部件,只需知道它们的名称(不需要 RTTI 支持)。但究竟我将如何将课程交付给项目以使其识别它们?在处理插件时,我需要将它们放在一个特殊的项目中,我在 .pro 文件中使用不同的标志集进行编译。但是我在这里怎么做呢?

我真的很想使用 qtplugin 但是如何使用呢?

一个主意:

让插件创建它返回的 QWidget 是否可以接受和优化?如果我在没有它的情况下创建我的界面,我真的看不出向设计师编写插件的意义。还是我误解了?

http://techbase.kde.org/Development/Tutorials/Writing_Qt_Designer_Plugins

我会将所有这些代码放入一个项目中,将其编译为插件,然后在我的主应用程序中查找并加载它。我将创建它的一个实例并让它创建一个我将显示的小部件。

有没有更好的方法来做到这一点,或者是这样吗?

0 投票
0 回答
237 浏览

qt - 如何仅使用该信息存储对象类型和创建对象

我想将 MetaObjects 存储在这样的列表中:

我想在整个应用程序中跟踪这些对象,但我还不想分配它们。通过在我的类中添加一些信息,我将能够使用 MetaObject 函数“classInfo(int).value()”。当我将它们存储在 QListWidget 中时,我会使用它。当按下 QListWidget 中的一行时,我希望能够创建存储在列表中的特定类型的对象。(还必须补充一点,所有类都来自同一个基类)

此示例代码描述了我想做的一些事情,除了在他的示例中,您可以在进行时添加类。 http://lists.qt.nokia.com/pipermail/qt-interest/2012-January/037204.html

我通读了手册,当我尝试以下操作时:

该项目可以编译,但是当我尝试打印“测试”对象时,它的值为空。我究竟做错了什么?这是最好的方法吗?

也在查看 MetaType,但是如果我不允许创建对象,我可以在哪里存储,例如菜单的字符串?如果我有一个返回字符串的静态函数,这会是一个更好的解决方案吗?

编辑:我现在改变了,所以构造函数是 Q_INVOKABLE,它解决了“test == null”的问题。

但是这个解决方案的缺点是什么?我应该只使用对象工厂(带有开关盒的旧时尚方式)吗?

0 投票
1 回答
2058 浏览

qt - 生成的 moc 名称不正确

我正在开发一个使用 cmake 的基于 Qt 的项目。我生成的所有 moc 文件都已命名*.moc,但我有一些文件,它们生成的 moc 文件具有名称moc_*.cpp,而不是*.moc. 为什么会发生这种情况以及如何修复这些文件。

编辑:

  • 我想说这些类继承自 QObject 并具有 Q_OBJECT 和 Q_DECLARE_PUBLIC 宏,除非它们有 .moc,否则它们不会与我一起编译。

  • 我必须在我的 .cpp 文件中包含 .moc 文件。

- 让我发疯的事情是我有一个相同的类(与我的类相同的实现)生成一个 .moc 但我的类生成 moc_*.cpp。

0 投票
1 回答
763 浏览

qt - 重载qt属性

我有一个自定义类型的属性。

QJson 有效地调用了以下动态赋值:

它返回 false,如 Qt 中所述:

如果该值与属性的类型不兼容,则不会更改该属性,并返回 false。

如何将其填充到我的自定义值中?明确定义一个副功能void set_x(QString)void set_x(QVariant)不可能工作,因为属性系统将不知道这个访问器。

另外,类型兼容性在哪里检查?- 程序控制永远不会到达

int foo::qt_metacall(QMetaObject::Call _c, int _id, void **_a)

元对象编译器生成的函数..

我怎样才能使Custom这些类型兼容?

0 投票
2 回答
948 浏览

qt - 给定类的所有实例上的 Qt 触发信号

通常 Qt 信号在 QObject 的特定实例上触发。

有没有办法通过 MetaObjects 在特定类的所有实例上触发它?

或者唯一的方法是维护你自己的所有实例的静态列表,也许通过使用构造函数和析构函数,然后只是 Q_FOREACH 呢?