QT宏、属性系统

张开发
2026/4/4 1:30:29 15 分钟阅读
QT宏、属性系统
Q_BYTE_ORDER、Q_BIG_ENDIAN、Q_LITTLE_ENDIANQ_BYTE_ORDER表示系统内存中数据使用的字节序Q_BIG_ENDIAN表示大端字节序Q_LITTLE_ENDIAN 表示小端字节序。// 检测系统是否为小端 #if Q_BYTE_ORDER Q_LITTLE_ENDIAN // 我的这个平台是小端的 qDebug() Q_LITTLE_ENDIAN endl; #else #endifQ_UNUSED(valuename)void MainWindow::on_imageSaved(int id, const QString fileName) { Q_UNUSED(id); LabInfo-setText(图片保存为 fileName); } # 屏蔽未使用的告警 QMAKE_CXXFLAGS -Wno-unused-parameterQ_SIGNALQ_SLOTclass B : public QObject { Q_OBJECT private Q_SLOTS: void slotTest(QPoint point); }QT_VERSION QT_VERSION_CHECK// 主要用于条件编译设置根据Qt版本不同编译不同的代码 // 我这里用的Qt版本是5.12.2因此软件走的分支是isHighVer false; // 示例代码 #if QT_VERSION QT_VERSION_CHECK(5,12,2) isHighVer true; #else isHighVer false; #endifQ_PROPERTYQ_PROPERTY(TYPE p##M MEMBER _p##M NOTIFY p##M##Changed)##是宏拼接操作符,反斜杠\是 C 预处理器中的换行符续行符。它用于在宏定义中连接多行代码。使用\可以将长的宏定义分成多行使代码更具可读性。这个Q_PROPERTY声明会被展开成类似以下的代码Q_PROPERTY(int pAge MEMBER _pAge NOTIFY pAgeChanged)这表示pAge是一个int类型的属性实际存储该属性值的成员变量是_pAge并且当属性pAge发生变化时会发出pAgeChanged信号。通过setProperty(name, value)设置通过property(name)获取在设计师 UI、QML、插件、反射中通用支持信号自动通知值变了自动发信号QObject::setProperty() 函数用于在运行期添加新的属性。QPushButton[statuserror] { background-color: red; color: white; } QPushButton[statusnormal] { background-color: green; color: white; }button-setProperty(status, error);Q_CLASSINFOQ_OBJECT Q_CLASSINFO(author, Sabrina Schweinsteiger) Q_CLASSINFO(url, http://doc.moosesoft.co.uk/1.0/)QMetaObject::classInfo() 函数来获取这些额外属性信息。#pragma region RegionName // 这里是代码块 #pragma endregion RegionNameQ_DECLARE_METATYPE是一个强大的工具使自定义类型能够在 Qt 的元对象系统中使用。通过这种方式你可以方便地将自定义类型存储在QVariant中并在信号和槽机制中传递。struct QueryResult { QSharedPointerQSqlQuery query_; }; Q_DECLARE_METATYPE(QueryResult)Q_ENUM_NSQ_ENUM_NSNamespace Enum专门给命名空间内的枚举用的注册宏。把命名空间nd里的枚举DataType注册到 Qt 元系统让它支持反射、信号槽、QML、字符串互转等 Qt 特性。对应类内枚举的Q_ENUM但不需要 QObject / Q_OBJECT。// nd_data_type.h #include QObject namespace nd { // 1️⃣ 必须加让命名空间支持元系统Qt 5.8 Q_NAMESPACE // 2️⃣ 定义枚举推荐 enum class enum class DataType { Unknown, Int, Float, String, Bool }; // 3️⃣ 注册把 nd::DataType 加入元系统 Q_ENUM_NS(DataType) } // 可选让枚举能在 QVariant 中跨线程传递 Q_DECLARE_METATYPE(nd::DataType)Q_FUNC_INFO自动获取【当前函数的完整信息】函数名 参数 返回值。QSharedPointerMyClass getShared(){ qDebug()__FUNCTION__; qDebug()Q_FUNC_INFO; return sharedFromThis(); } getShared QSharedPointerMyClass MyClass::getShared()

更多文章