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)
相关推荐
xlxxy_6 分钟前
sap获取批次特性报表
java·linux·开发语言·前端·数据库·abap·mm
北冥you鱼8 分钟前
Go语言常用包使用指南:从标准库到第三方利器
开发语言·microsoft·golang
俺不中嘞17 分钟前
python常用函数
开发语言·python
欢喜躲在眉梢里25 分钟前
用飞算Java做了一套新能源充电运营管理系统:把站点、设备、订单拆成可运营的微服务
java·开发语言·微服务·ai编程·技术分享·java开发·飞算javaai炫技赛
এ慕ོ冬℘゜1 小时前
深入理解 JavaScript 事件对象:从 target 到 preventDefault 的实战指南
开发语言·前端·javascript
学逆向的1 小时前
汇编——修改EIP的值
开发语言·汇编·网络安全
weixin_422329311 小时前
AgentScope Java ReActAgent 核心循环深度解析
java·开发语言·人工智能
weilaieqi11 小时前
行业前列!CASAMANIA HORM富森美高端意式沙发标杆
开发语言
小二·2 小时前
WebGPU 浏览器端跑大模型:让AI在网页里跑起来(WebLLM/Transformers.js实战)
开发语言·javascript·人工智能
小猴子爱上树2 小时前
Temu批量视频翻译Python实现方案
开发语言·python·音视频