当前位置:网站首页>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
边栏推荐
猜你喜欢
助推科技强国高质量发展《科创超级训练营》系列活动正式拉开帷幕
Ali's official Redis development specification
MySql 怎么查出符合条件的最新的数据行?
XAML WPF项目groupBox控件
TCP million concurrent server optimization parameters
zabbix部署和简单使用
The site is not found after the website is filed. You have not bound this domain name or IP to the corresponding site! The configuration file does not take effect!
[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
LeetCode Week 303
B011 - 基于51的多功能指纹智能锁
随机推荐
TCP百万并发服务器优化调参
LeaRun.net快速开发动态表单
指针和解引用
SQL的substring_index()用法——MySQL字符串截取
Flask框架实战
我在启牛开户安全吗?谁能告诉我开不靠谱?
直播系统聊天技术(八):vivo直播系统中IM消息模块的架构实践
完全背包问题求组合数和排列数
md5sum源码 可多平台编译
主流小程序框架性能分析
【R语言】线性混合模型进行重复测量设计分析
开发工具:第五章:使用idea生成实体类
今年最火爆的词:商业分析,看这一篇就够了!
C#的DateTime帮助类
Financial products with high annualized returns
Pytorch|GAN在手写数字集上的复现
Daily Yuxian Big Defeat
GridControl helper class for DevExpress
插入排序 优化插入排序
【二叉树】奇偶树