QT常用全局宏定义

文章目录

    • 1 qt版本相关宏
    • 2 内存字节序相关宏(内存数据使用的大小端)
    • 3 共享库相关[宏定义](https://so.csdn.net/so/search?q=%E5%AE%8F%E5%AE%9A%E4%B9%89&spm=1001.2101.3001.7020)
    • 4 虚函数重载宏
    • 5 函数内不使用参数处理宏
    • 6 调试类宏定义
    • 7 循环语句宏
    • 8 命名空间

方法描述示例
QT_VERSIONQt 编译器版本
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_ENDIAN
Q_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
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值