问题标签 [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++ - 仅在派生类中从基类向现有 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
?
c++ - QMetaObject::connect 文档
我在网络和文档中搜索了有关 QMetaObject::connect 的文档。它看起来很有趣,因为它通过索引连接信号和插槽。我看到它在几个地方使用,包括动态信号和插槽的实现。我也试过了,它似乎工作。这被认为是标准使用模型还是黑客?如果是标准使用模型,我是否错过了文档?(我在 QMetaObject 下没有看到它。)如果没有,我应该考虑任何“陷阱”吗?
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 如下所示
c++ - Q_ENUM 到 ostream
在一个项目中是自定义记录器,我想将其扩展为像 qDebug() 那样写入枚举值。有一些简单的方法吗?
这是我认为可能有用的东西(但它没有):
c++ - Qt invokeMethod 调用具有输出参数的函数
我试图弄清楚 QMetaObject::invokeMethod 的用法。我有一个有一个参数的函数(非 const QString),我希望它成为输出,该函数没有返回值,在它上面调用 invokeMethod 总是失败,而另一个有返回值且没有参数的函数可以被调用成功地。这是代码:
我的班级.h
我的类.cpp
主文件
结果如下:
试了很多方法,都不行,有大神知道原因吗?提前致谢!
c++ - 有没有办法通过类名找到 QObject 子项?
如果我们知道它的类型和名称(如果指定),就有可能找到一个孩子,如下所示:
然而,每个QObject
都有metaObject()
返回的函数属性 QMetaObject*
。其又QMetaObject
具有功能className()
。QObject
是否可以像这样通过类名轻松找到:
或者是让所有QWidget
孩子通过的唯一方法
然后用std::find_if
by过滤列表metaObject()->className()
?
c++ - 是否可以将宏功能用作 QMetaMethod 标签?
Qt 允许您使用以下语法在槽/Q_INVOKABLE 方法上添加任意标签:
我想制作一个宏功能标签,如下所示:
我希望最终会成为我的代码解析的字符串tag()
-MY_CUSTOM_TAG(someData)
但是,MOC 给了我这个错误:
有没有办法使这项工作?还是 MOC 只支持标签的简单宏?
c++ - QMetaObject 上的新 lua_newuserdata 放置
我正在尝试将 Lua 与 Qt 的 QMetaObject 系统集成。我有一个派生自该类的类,QObject
我基于类名使用QObject::staticMetaObject
.
主.h:
主文件
问题是 lua 将为 userdata 分配内存,但不会构造它所代表的对象。所有文档都说要使用placement new 在ptr
lua 用户数据中构造您的对象,但是QMetaObject
不允许开箱即用的placement new。
我已经包含了来自 ixSci 的关于使用QMetaType
在ptr
. 然而,typeId
总是以未知的方式回来。
c++ - 带参数默认值的 QMetaMethod::invoke()
调用QMetaMethod::invoke()
包含默认参数的方法时,调用失败。
如果我将 int 作为第一个参数传递,那么它运行良好。有什么方法可以检索该方法的参数的默认值,以便我可以传递这些参数而不是什么都不传递?
我正要手动将每个方法的默认值存储在类中,但这是一个丑陋的 hack。
谢谢你的时间。
qt - 如何将 Q_ENUM 转换为 QString 对于 QT > 5.11 最有效的方式?
QString
我阅读了一些关于如何从值中获取实际值的建议Q_ENUM
。
以下是我想出的 3 种可能的方法,它们是 QT5.11.1 中的可编译构造
他们应该更喜欢哪一个,为什么?