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)
相关推荐
qq_283720052 小时前
VSCode 编译 Qt 5.12 QML 完整教程(Windows + MinGW)
windows·vscode·qt
2201_756206342 小时前
STM32F407 + ML307 阿里云物联网项目总结
c语言·开发语言·嵌入式硬件
小糯米6012 小时前
C++ 单调栈原理与模板
开发语言·c++·算法
东北甜妹2 小时前
Python脚本
java·开发语言·前端
NGC_66112 小时前
ConcurrentHashMap1.8 多线程扩容机制
java·开发语言
星辰_mya2 小时前
自定义注解 + AOP:打造企业级通用组件(日志、限流、幂等)
java·开发语言·spring·面试·架构师
大阿明2 小时前
Go基础之环境搭建
开发语言·后端·golang
freshman_y3 小时前
经典的C语言题型
c语言·开发语言·算法