当前位置:网站首页>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
边栏推荐
猜你喜欢
随机推荐
在码云拉取代码后,调整了seata版本1.5.2。出现如下异常。是因为数据库表缺少字段导致的吗?
C#Excel帮助类
FTP helper class for C#
DataTable Helper Class for C#
Shell nl命令详解(显示行号、读取文件)
Good guy, the company server just crashed!
Ali's official Redis development specification
星途一直缺颠覆性产品?青岛工厂这款M38T,会是个突破点?
11 Publish a series as soon as it is released
关于Mysql服务无法启动的问题
不需要写代码,快速批量修改文件夹中图片的格式
关于LocalDateTime的全局返回时间带“T“的时间格式处理
2022年深圳市促进大健康产业集群高质量发展的若干措施
My new book has sold 10,000 copies!
Unity ui点击事件只响应最上层ui的方式
2022.08月--pushmall推贴共享电商更新与开发计划
Daily Yuxian Big Defeat
【R语言】批量重命名文件
C # Excel helper classes
金仓数据库 MySQL 至 KingbaseES 迁移最佳实践(2. 概述)









