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)
相关推荐
聆风吟º几秒前
【C标准库】深入理解C语言strcmp函数:字符串比较的核心用法
c语言·开发语言·库函数·strcmp
Fanfanaas6 分钟前
Linux 进程篇 (四)
linux·运维·服务器·开发语言·c++·学习
Sylvia-girl7 分钟前
C++中类与对象
开发语言·c++
良木生香10 分钟前
【C++初阶】:泛型编程的代表作---C++初阶模板
c语言·开发语言·数据结构·c++·算法
网域小星球17 分钟前
C++ 从 0 入门(一)|C++ 基础语法、命名空间、引用、IO 输入输出
开发语言·c++·引用·命名空间·cin/cout
雾岛听蓝32 分钟前
Qt按钮与标签控件详解
开发语言·经验分享·笔记·qt
黑牛儿34 分钟前
AI Agent\+PHP实现智能接口限流,避开算力成本陷阱(结合今日AI热点)
开发语言·人工智能·php
XMYX-036 分钟前
15 - Go 泛型(Generics):从入门到实战
开发语言·golang
Halo_tjn37 分钟前
Java 内部类
java·开发语言·算法
碎碎念的安静40 分钟前
WPF 与 Qt 进程间通信(IPC)
开发语言·qt·wpf