QT宏、属性系统

Q_BYTE_ORDER、Q_BIG_ENDIAN、Q_LITTLE_ENDIAN

Q_BYTE_ORDER 表示系统内存中数据使用的字节序;
Q_BIG_ENDIAN 表示大端字节序;
Q_LITTLE_ ENDIAN 表示小端字节序。

复制代码
// 检测系统是否为小端
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN  // 我的这个平台是小端的
    qDebug() << "Q_LITTLE_ENDIAN" << endl;
#else

#endif

Q_UNUSED(valuename)

复制代码
void MainWindow::on_imageSaved(int id, const QString &fileName)
{
   Q_UNUSED(id);
   LabInfo->setText("图片保存为: " + fileName);
}

# 屏蔽未使用的告警
QMAKE_CXXFLAGS += -Wno-unused-parameter

Q_SIGNAL

Q_SLOT

复制代码
class 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;
#endif

Q_PROPERTY

复制代码
Q_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[status="error"] {
    background-color: red;
    color: white;
}

QPushButton[status="normal"] {
    background-color: green;
    color: white;
}

button->setProperty("status", "error");

Q_CLASSINFO

复制代码
      Q_OBJECT
      Q_CLASSINFO("author", "Sabrina Schweinsteiger")
      Q_CLASSINFO("url", "http://doc.moosesoft.co.uk/1.0/")

QMetaObject::classInfo() 函数来获取这些额外属性信息。

复制代码
#pragma region RegionName
// 这里是代码块
#pragma endregion RegionName

Q_DECLARE_METATYPE

是一个强大的工具,使自定义类型能够在 Qt 的元对象系统中使用。通过这种方式,你可以方便地将自定义类型存储在 QVariant 中,并在信号和槽机制中传递。

复制代码
struct QueryResult {
    QSharedPointer<QSqlQuery> query_;
};
Q_DECLARE_METATYPE(QueryResult)

Q_ENUM_NS

Q_ENUM_NS= Namespace + 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)
相关推荐
liuhuizuikeai20 分钟前
可视化门禁---Linux/Qt+SqLite篇
linux·运维·qt
Cyber4K33 分钟前
【Python专项】进阶语法-系统资源监控与数据采集(1)
开发语言·python·php
Le_ee1 小时前
ctfweb:php/php短标签/.haccess+图片马/XXE
开发语言·前端·php
yong99902 小时前
MATLAB读取高光谱图像
开发语言·matlab
2zcode2 小时前
基于MATLAB的肝病风险评估与分期分析系统设计与实现
开发语言·matlab
小小de风呀2 小时前
de风——【从零开始学C++】(五):内存管理
开发语言·c++
ooseabiscuit2 小时前
Laravel6.x核心优化与特性全解析
android·开发语言·javascript
折哥的程序人生 · 物流技术专研2 小时前
Java面试85题图解版(一):基础核心篇
java·开发语言·后端·面试
Hello.Reader3 小时前
算法基础(十)——分治思想把大问题拆成小问题
java·开发语言·算法
一只大袋鼠3 小时前
JavaWeb四种文件上传方式(下篇)
java·开发语言·springmvc·javaweb