c++ - QMetaType 是否与模板化类型一起使用

标签 c++ qt

我已经 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/

相关文章:

c++ - 使用正则表达式的条件组匹配

c++ - 压缩包 - 错误 : Error while opening the archive : no error

c++ - 跟踪生产 Linux 服务器上的内存损坏

c++ - 如何使用 rand_r 以及如何以线程安全的方式使用它?

qt - Windows上带有OpenCv 2.3.4的Qt Creator 5.0.1

c++ - Qt中如何从外部调用一个信号?

C++ Templated Functor (based on Modern C++ Design)编译错误

c++ - 这个前向声明有什么问题

visual-studio - 使用 CEF 编译 Qt 项目

linux - GTK 和 Qt 的功能区界面