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

c++ - 仅在派生类中从基类向现有 Q_PROPERTY 添加选项

我有一个非常简单的基类,它定义了一个带有 READ 和 NOTIFY 的普通 Q_PROPERTY(WRITE 并非在所有可能的派生实现中)。

现在我有 2 个派生类,其中一个只支持一个条目 ( SingleItem),另一个支持多个条目 ( MultiItem)。

SingleItem在请求时将一个 QString 成员转换为 QStringList,并允许使用不同调用的属性 ( theEntry) 对其进行设置:

MutliItem存储一个 QStringList (for someEntries)。我想使用BaseClass. 但我不知道如何将 WRITE 选项添加到已定义的 Q_PROPERTY。

我无法添加 WRITE 选项,BaseClass因为它会违反含义。并非每个对象都BaseClass允许设置该属性,但MultiItem应该仅使用该属性编写对象。

如果不向 a 声明一个 WRITE 选项,在调用时只记录一个警告,这virtual ... = 0是否BaseClass可能SingleItem

0 投票
0 回答
94 浏览

c++ - QMetaObject::connect 文档

我在网络和文档中搜索了有关 QMetaObject::connect 的文档。它看起来很有趣,因为它通过索引连接信号和插槽。我看到它在几个地方使用,包括动态信号和插槽的实现。我也试过了,它似乎工作。这被认为是标准使用模型还是黑客?如果是标准使用模型,我是否错过了文档?(我在 QMetaObject 下没有看到它。)如果没有,我应该考虑任何“陷阱”吗?

0 投票
1 回答
5174 浏览

c++ - 无法在 CMake 项目中使用 Q_OBJECT 宏

我在 CMake 项目中遇到了 Qt 元对象编译器的问题。我正在构建的共享库包含以下代码并使用 pimpl 习惯用法。调用 CMake 并编译后我得到

AUTOGEN:错误:~/tools/Project/gui/src/mainWindow.cpp:该文件包含 Q_OBJECT 宏,但不包含“mainWindow.moc”!gui/CMakeFiles/gui_automoc.dir/build.make:57: 目标'gui/CMakeFiles/gui_automoc' 的配方失败 make[2]: *** [gui/CMakeFiles/gui_automoc] 错误 1 ​​CMakeFiles/Makefile2:234: 配方目标 'gui/CMakeFiles/gui_automoc.dir/all' 失败

我不明白我做错了什么,或者在我的项目中将 src 文件与 Q_OBJECT 宏合并的正确方法是什么。请帮忙=/

gui/include/gui/mainWindow.hpp

gui/src/mainWindow.cpp

我像这样编译库:

现在我想将此库链接到我的可执行文件

应用程序/main.cpp

使用以下 CMakelists.txt 我链接到 gui lib

我项目的顶级 CMakeLists 如下所示

0 投票
1 回答
159 浏览

c++ - Q_ENUM 到 ostream

在一个项目中是自定义记录器,我想将其扩展为像 qDebug() 那样写入枚举值。有一些简单的方法吗?

这是我认为可能有用的东西(但它没有):

0 投票
2 回答
1703 浏览

c++ - Qt invokeMethod 调用具有输出参数的函数

我试图弄清楚 QMetaObject::invokeMethod 的用法。我有一个有一个参数的函数(非 const QString),我希望它成为输出,该函数没有返回值,在它上面调用 invokeMethod 总是失败,而另一个有返回值且没有参数的函数可以被调用成功地。这是代码:

我的班级.h

我的类.cpp

主文件

结果如下:

试了很多方法,都不行,有大神知道原因吗?提前致谢!

0 投票
3 回答
3922 浏览

c++ - 有没有办法通过类名找到 QObject 子项?

如果我们知道它的类型和名称(如果指定),就有可能找到一个孩子,如下所示:

然而,每个QObject都有metaObject()返回的函数属性 QMetaObject*。其又QMetaObject具有功能className()QObject是否可以像这样通过类名轻松找到:

或者是让所有QWidget孩子通过的唯一方法

然后用std::find_ifby过滤列表metaObject()->className()

0 投票
1 回答
120 浏览

c++ - 是否可以将宏功能用作 QMetaMethod 标签?

Qt 允许您使用以下语法在槽/Q_INVOKABLE 方法上添加任意标签:

我想制作一个宏功能标签,如下所示:

我希望最终会成为我的代码解析的字符串tag()-MY_CUSTOM_TAG(someData)但是,MOC 给了我这个错误:

有没有办法使这项工作?还是 MOC 只支持标签的简单宏?

0 投票
3 回答
161 浏览

c++ - QMetaObject 上的新 lua_newuserdata 放置

我正在尝试将 Lua 与 Qt 的 QMetaObject 系统集成。我有一个派生自该类的类,QObject我基于类名使用QObject::staticMetaObject.

主.h:

主文件

问题是 lua 将为 userdata 分配内存,但不会构造它所代表的对象。所有文档都说要使用placement new 在ptrlua 用户数据中构造您的对象,但是QMetaObject不允许开箱即用的placement new。

我已经包含了来自 ixSci 的关于使用QMetaTypeptr. 然而,typeId总是以未知的方式回来。

0 投票
1 回答
990 浏览

c++ - 带参数默认值的 QMetaMethod::invoke()

调用QMetaMethod::invoke()包含默认参数的方法时,调用失败。

如果我将 int 作为第一个参数传递,那么它运行良好。有什么方法可以检索该方法的参数的默认值,以便我可以传递这些参数而不是什么都不传递?

我正要手动将每个方法的默认值存储在类中,但这是一个丑陋的 hack。

谢谢你的时间。

0 投票
2 回答
1374 浏览

qt - 如何将 Q_ENUM 转换为 QString 对于 QT > 5.11 最有效的方式?

QString我阅读了一些关于如何从值中获取实际值的建议Q_ENUM

以下是我想出的 3 种可能的方法,它们是 QT5.11.1 中的可编译构造

他们应该更喜欢哪一个,为什么?