当前位置:网站首页>QT常用全局宏定义
QT常用全局宏定义
2022-08-01 17:33:00 【小小工程员】
文章目录
| 方法 | 描述 | 示例 |
|---|---|---|
| QT_VERSION | Qt 编译器版本 | |
| Q_DECL_OVERRIDE | 在某个类中重载虚函数 | void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE; |
| Q_UNUSED | 不在函数体里使用的参数 | Q_UNUSED(id); |
| Q_FUNC_INFO | 函数所属类和参数信息 | qDebug()<<Q_FUNC_INFO<<“this is a debug example”; |
| forever | 死循环宏定义 | 底层使用for( ; ; )实现 |
| foreach | 容器类的遍历宏 | 可遍历链表、vecter、hash等各种容器类的数据结构 |
1 qt版本相关宏
1.1 QT_VERSION
这个宏展开为数值形式 0xMMNNPP (MM = major, NN = minor, PP = patch) 表示 Qt 编译器版本,例如 Qt 编译器版本为 Qt 5.9.1,则 QT_VERSION 为 0x050901。这个宏常用于条件编译设置,根据 Qt 版本不同,编译不同的代码段。
1.2 QT_VERSION_CHECK
这个宏展开为 Qt 版本号的一个整数表示,用于版本判断的时候条件编译,如下示例:
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
#include <QtWidgets>
#else
#include <QtGui>
#endif
1.3 QT_VERSION_STR
这个宏展开为 Qt 版本号的字符串,用于显示,比如将界面title设置为qt版本号:
this->setWindowTitle(QT_VERSION_STR);
我用的qt5.9.5版本:
2 内存字节序相关宏(内存数据使用的大小端)
Q_BYTE_ORDER、Q_BIG_ENDIAN 和 Q_LITTLE_ENDIANQ_BYTE_ORDER 表示系统内存中数据使用的字节序;Q_BIG_ENDIAN 表示大端字节序;Q_LITTLE_ ENDIAN 表示小端字节序。
这几个宏在需要判断系统字节序时才会用到,使用示例如下:
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN //当前系统是否使用的小端
...
#else
...
#endif
3 共享库相关宏定义
3.1 Q_DECL_IMPORT
3.2 Q_DECL_EXPORT
4 虚函数重载宏
Q_DECL_OVERRIDE
在类定义中,用于重载一个虚函数,例如在某个类中重载虚函数 paintEvem(),可以定义如下:
void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
使用 Q_DECL_OVERRIDE 宏后,如果重载的虚函数没有进行任何重载操作,编译器将会报错。
5 函数内不使用参数处理宏
Q_UNUSED
这个宏用于在函数中定义不在函数体里使用的参数,如果不使用该宏定义处理,编译器将会报出参数未使用的警告;宏定义使用示例如下,id不需要使用的情况:
void MainWindow::on_imageSaved(int id, const QString &fileName)
{
Q_UNUSED(id);
ui->LabInfo->setText (fileName);
}
6 调试类宏定义
6.1 qDebug
这是qt中的信息调试宏,还有其他不同等级的调试宏定义,qt中宏定义的源代码如下:
#define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug
#define qInfo QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).info
#define qWarning QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).warning
#define qCritical QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).critical
#define qFatal QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).fatal
以上宏定义都是用于调试信息输出,使用如下:
qDebug()<<"this is a debug example";
6.2 Q_FUNC_INFO
函数信息宏,包含函数所属类和参数信息,使用如下:
qDebug()<<Q_FUNC_INFO<<"this is a debug example";
该宏一般和qDebug配合使用,可用于快速定位调试信息位置。
调试信息输出如下:
7 循环语句宏
7.1 forever
死循环宏定义,和while(1)类似,其底层使用for( ; ; )实现,使用方法如下:
forever
{
...
}
7.2 foreach
容器类的遍历宏,个人是非常喜欢该宏定义的,可遍历链表、vecter、hash等各种容器类的数据结构。使用示例如下:
//下面这个循环语句用来查找可以用的串口端口
//不确定有多少串口可用,也就不知道循环多少次,所以用foreach(不知道用的就百度)
foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
QSerialPort serial; //在循环语句内部实例化类,因为可用串口不一定只就一个
serial.setPort(info); //设置能够用的串口端口
if(serial.open(QIODevice::ReadWrite)) //用ReadWrite可读写的方式打开串口
{
//记录可用的uart名字serial.portName(),前面的ui->PortBox->addItem不用管,这个是界面里面的。
ui->PortBox->addItem(serial.portName());
//然后关闭串口,因为这段代码打开串口只是为了查找串口可以用不可用而已。
serial.close();
}
}
上述为串口查找核心代码段,来源:https://blog.csdn.net/weixin_42887343/article/details/83866730
8 命名空间
#ifndef UI_ORANGECV_H
#define UI_ORANGECV_H
QT_BEGIN_NAMESPACE
class Ui_orangeCvClass
{
public:
QAction *action_connect;
QWidget *centralWidget;
void setupUi(QMainWindow *orangeCvClass);
};
namespace Ui {
class orangeCvClass: public Ui_orangeCvClass {
};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_ORANGECV_H
边栏推荐
- Vulnhub target drone: HARRYPOTTER_ NAGINI
- sql添加索引
- 缓存一致性MESI与内存屏障
- 创造建材数字转型新视界,中建材如何多边赋能集团业务快速发展
- 2022 Strong Net Cup CTF---Strong Net Pioneer ASR wp
- Are online account opening commissions reliable? Is online account opening safe?
- B011 - 基于51的多功能指纹智能锁
- 小贝拉机器人是朋友_普渡科技召开新品发布会,新一代送餐机器人“贝拉”温暖登场...
- DevExpress的GridControl帮助类
- 极化微波成像概述
猜你喜欢

LeaRun.net快速开发动态表单
![[Dark Horse Morning Post] Hu Jun's endorsement of Wukong's financial management is suspected of fraud, which is suspected to involve 39 billion yuan; Fuling mustard responded that mustard ate toenails](/img/d7/4671b5a74317a8f87ffd36be2b34e1.jpg)
[Dark Horse Morning Post] Hu Jun's endorsement of Wukong's financial management is suspected of fraud, which is suspected to involve 39 billion yuan; Fuling mustard responded that mustard ate toenails

hcip第九天
![[供应链·案例篇]石油和天然气行业的数字化转型用例](/img/44/9ef9f86f8afb85f49aac1cce55723d.jpg)
[供应链·案例篇]石油和天然气行业的数字化转型用例

MySQL加锁案例分析

助推科技强国高质量发展《科创超级训练营》系列活动正式拉开帷幕

广汽埃安“弹匣电池”,四大核心技术,出行安全保障

生物制药产业发展现状和趋势展望

今年最火爆的词:商业分析,看这一篇就够了!

The anxiety of the post-90s was cured by the vegetable market
随机推荐
实现mnist手写数字识别
晶振工作原理详解
MySql 怎么查出符合条件的最新的数据行?
【R语言】对图片进行裁剪 图片批量裁剪
Good guy, the company server just crashed!
金仓数据库 KDTS 迁移工具使用指南(2. 简介)
【R语言】线性混合模型进行重复测量设计分析
Detailed explanation of the working principle of crystal oscillator
C#的DataTable帮助类
2022.08月--pushmall推贴共享电商更新与开发计划
移动端吸顶方案
一加OnePlus 10RT出现在Geekbench上 产品发布似乎也已临近
golang json 返回空值
分布式消息队列平滑迁移技术实战
SQL的索引详细介绍
金仓数据库 KingbaseES V8.3 至 V8.6 迁移最佳实践(4. V8.3 到 V8.6 数据库移植实战)
Daily Yuxian Big Defeat
基于BiGRU和GAN的数据生成方法
UI helper class for Winform - some components will use DevExpress components
极化微波成像概述2