注册类型与容器
Registering types vs containers
如果我注册如下自定义类型,以便在排队连接中使用:
Q_DECLARE_METATYPE(MyClass);
qRegisterMetaType<MyClass>();
我可以将排队连接中的类型与这样的信号一起使用:
void MySignal(MyType o);
现在我还想将类型与这样的信号一起使用:
void MyVectorSignal(QVector<MyType> v);
我记得我在某处读到Qt自动允许将注册类型与容器一起使用,而无需明确注册特定的类型/容器组合。
但这对我不起作用。我还必须注册容器:
Q_DECLARE_METATYPE(QVector<MyType>);
qRegisterMetaType<QVector<MyType>>();
它应该在没有后一个注册码的情况下工作吗?这真的有必要吗?容器应该开箱即用吗?
来自 Qt 文档Q_DECLARE_METATYPE:
某些类型是自动注册的,不需要此宏:
- 指向从 QObject 派生的类的指针
- QList、QVector、QQueue、QStack、QSet 或 QLinkedList,其中 T 是已注册的元类型
- QHash、QMap 或 QPair,其中 T1 和 T2 是注册的元类型
- QPointer,QSharedPointer,QWeakPointer,其中T是从QObject派生的类
- 向Q_ENUM或Q_FLAG注册的枚举
- 具有Q_GADGET宏的类
所以你不需要注册QVector<T>
.只需确保 T 是已注册的元类型即可。
相关文章:
- 使用QJsEngine在Qt中注册自定义类型
- 在Qt中注册自定义元类型的别名类型
- 如何注册枚举类型到QJSEngine,以便在脚本环境中使用?
- 在编译时生成某种子类/类型注册表?
- 将 const 类型引用对象注册为类成员对象C++
- 如何在QTScript中将QLIST内部的QMAP注册为元素类型
- 如何恢复注册表项的所有元素?(上次写入时间,类型,值,名称...这是正确的方法吗?
- UWP,加载窗口运行时组件 == 请求的窗口运行时类型 "..." 未注册
- 注册类型与容器
- 在多个DLL中注册常见的Qt元类型
- 读取 Qt 中的REG_MULTI_SZ类型注册表项
- 从C (例如Main.CPP)访问注册类型实例
- 在Qt中注册元类型的模式
- C++ 注册类型上的信号 QML 插槽
- 是否可以从对象而不是类注册 QML 类型
- 在 Angelscript 中为 glm::vec3 的基于 vic3 的值类型注册赋值运算符
- c++派生类型的自动工厂注册
- 注册特定文件类型的Shell扩展
- ATL如何转换BSTR* str到注册表项.SetValue(LPCTSTR字符串类型)
- MFC向注册表写入双数据类型