需求简介:由于做的是嵌入式工业相机,我们的软件运行在linux上,每次测试软件时,需要查看测试数据时只能写日志或者通过串口打印到PC。当在现场使用时没有电脑想看程序时时运行的数据就做不到,唯一的办法就是写日志,然后把日志拷贝出来拿到电脑上查看,这样一来非常浪费时间,也不能在设备上看时时的测试数据。基于此自己写了这个类似与qDebug()打印信息的工具mDebug(),把数据打印到自己指定的窗口,这样就解决了问题,提高了现场的测试效率,程序运行界面如下所示:
这个界面做的很类似ubuntu的终端界面。mDebug()的实现原理主要是使用了C++的重载功能,对不同的数据类型都重载了<<运算符,使mDebug()可以打印指定的数据类型,为了方便使用mDebug()能打印的数据类型几乎包含了QT的所有基本数据类和opencv的所有基本数据类型。之所以也要支持打印opencv的数据类,是因为我们工业相机是基于opencv这个开源库实现的。下面介绍mDebug()的实现。
创建一个MyDebug类(MyDebug.h 和 MyDebug.cpp)
第一:MyDebug.h文件内容介如下。
//引入opencv库
#include <unistd.h>
#include <cv.h>
//引入QT类
#include <QTextEdit>
#include <QDateTime>
#include <QFile>
using namespace cv;
using namespace std;
//宏 返回MyDebug对象
#define mDebug() MyDebug::myDebug()
//做类前置声明
class QPoint;
class QPointF;
class QRect;
class QRectF;
class CvPoint;
class CvPoint2D32f;
class MyDebugDlg;
class QTextEdit;
1.1、在MyDebug类中对想要打印的数据类型进行 <<运算符重载,所有要重载的数据类型如下。
//重载 << 运算符
MyDebug& operator<<(const QString &sMsg); //重载 << 运算符 打印QString
MyDebug& operator<<(const String &sMsg); //重载 << 运算符 打印String
MyDebug& operator<<(const bool &sMsg); //重载 << 运算符 打印bool
MyDebug& operator<<(const char &sMsg); //重载 << 运算符 打印char
MyDebug& operator<<(const signed short &sMsg); //重载 << 运算符 打印short
MyDebug& operator<<(const unsigned short &sMsg); //重载 << 运算符 打印un