我已经 typedef ProxyTray<QImage, ImageCaptureService> TrayType;
在我的类(class)中(是 QObject 但ProxyTray
不是 QObject)。我在 Signal, Slots 中使用该类型作为参数类型。
是qRegisterMetaType
接受这样的类型?我将如何为参数化类型的字符串类型名称建模?
最佳答案
你可以声明模板元类型:
Q_DECLARE_METATYPE_TEMPLATE_1ARG(TemplatedClass)
Q_DECLARE_METATYPE_TEMPLATE_2ARG(TemplatedClass)
例如
template<class T>
class Foo {
};
Q_DECLARE_METATYPE_TEMPLATE_1ARG(Foo)
允许传递Foo<int>
, Foo<QString>
等...信号和插槽。
template<class T, class U>
class Foo {
};
Q_DECLARE_METATYPE_TEMPLATE_2ARG(Foo)
允许传递Foo<int, double>
, Foo<bool, bool>
等等……
但是有两个注意事项:
- 这不是官方 Qt API 的一部分,可能会在某个时候消失。
- 模板类型必须使用
Q_DECLARE_METATYPE
自行注册:Foo<Bar>
需要Bar
也被注册为元类型(如 Qt 5.6)
关于c++ - QMetaType 是否与模板化类型一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11725730/