例如,当你定义了一个自定义结构体MyStruct并使用Q_DECLARE_METATYPE(MyStruct)声明后,Qt在编译阶段就知道了这个类型可以用于元对象相关的操作。 qRegisterMetaType则是在运行时对类型进行注册。它建立在Q_DECLARE_METATYPE的基础之上。也就是说,只有当一个类型已经通过Q_DECLARE_METATYPE进行了声明,才能使用qRegisterMetaT...
这个模板特化提供了一个静态函数qt_metatype_id,它为该类型分配并返回一个独一无二的ID。这个ID用于QVariant创建、复制、比较和析构该类型的实例。 综上,Q_DECLARE_METATYPE(Type)宏用于告诉 Qt 框架某个自定义类型Type是存在的,并且可以被元对象系统所使用。使用这个宏之后,Type就可以用于 QVariant 类型和信号...
1)宏 Q_DECLARE_METATYPE 源码如下。摘自版本路径(C:\Qt\Qt5.7.1\5.7\msvc2013\include\QtCore\qmetatype.h) #define Q_DECLARE_METATYPE(TYPE) Q_DECLARE_METATYPE_IMPL(TYPE) #define Q_DECLARE_METATYPE_IMPL(TYPE) \ QT_BEGIN_NAMESPACE \ template <> \ struct QMetaTypeId< TYPE > \ { \ e...
} Q_DECLARE_METATYPE(A::Test) 今天遇到了莫名其妙的编译错误,原因是我用QVariant设置一个自定义指针类型的Data,这时就需要Q_DECLARE_METATYPE(Type*)了,如果设置了Q_DECLARE_METATYPE(Type),Qt只能识别Type类型,而未能识别其指针类型!!! 另外自定义类型中一定要有默认构造函数,如果已经显式的定义了带有无默认...
简介:Qt信号槽使用结构体作为参数:Q_DECLARE_METATYPE和qRegisterMetaType的作用 问题由来 定义一个结构体 struct myStruct { int a; float b; }; 通过信号槽传递该结构体 connect(this, SIGNAL(m_signal(myStruct)), this, SLOT(m_slot(myStruct))); ...
【Qt之QMetaType】使用 介绍 QMetaType类管理元对象系统中的命名类型。 该类用作QVariant和排队的信号与槽连接中类型的编组辅助器。它将类型名称与类型关联起来,以便可以在运行时动态创建和销毁它。使用Q_DECLARE_METATYPE()声明新类型,以使它们可供QVariant和其他基于模板的函数使用。调用qRegisterMetaType()使类型...
Q_OBJECT public: Jerry(QObject *parent = nullptr) : QObject(parent) { } public slots: void runAway() { qDebug() << u8"那只猫又来了,快溜!" ; } }; 信号-槽的使用 使用比较简单,先说一下使用。 信号的使用 信号 就是普通的类成员函数,信号只要声明(declare),不需要实现(implement),实现由...
。也就是说,QVariant提供了一组预定义的构造函数。不能使用Q_DECLARE_METATYPE宏添加新的宏。
总结 通过上述步骤,你可以在Qt中将QMetaTypeId赋值到enum类型,并在Qt的元对象系统中使用它。这通常涉及到定义枚举类型、使用Q_DECLARE_METATYPE宏注册类型、在应用程序初始化时调用qRegisterMetaType函数,以及使用QMetaType::type()或qMetaTypeId<T>()函数获取类型ID。
Q_DECLARE_INTERFACE(interface, identifier):该宏用于声明一个接口类,并为其生成相关的元对象代码。接口类通常被用作插件开发中的基类,通过该宏可以让Qt识别接口并进行相应的操作。 Q_PLUGIN_METADATA(IID, FILE):该宏用于在插件项目中定义元数据信息。IID参数是接口标识符,表示插件所实现的接口类型;FILE参数是插件...