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)