Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板
前言
??QWT开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,本系列旨在系统解说并逐步更新其各种Demo示例。
https://sourceforge.net/projects/qwt/files
??
??csdn粉丝0积分下载地址:https://download.csdn.net/download/qq21497936/87231942
??压缩包包含了:
- qwt-6.2.0.zip
带有Qwt源码的Zip文件和Windows的html文档
- qwt-6.2.0标准bz2
压缩的tar文件,带有Qwt源代码和UNIX系统(Linux、Mac…)的html文档
- qwt-6.2.0.pdf
Qwt文档为PDF文档。
- qwt-6.2.0.qch
??Qwt文档作为Qt压缩帮助文档,可以加载到Qt助手或创建者中。在Qt Creator中,上下文相关的帮助将像Qt类一样可用。
模块化部署到工程
带有Qwt源码的Zip文件和Windows的html文档
压缩的tar文件,带有Qwt源代码和UNIX系统(Linux、Mac…)的html文档
Qwt文档为PDF文档。
??Qwt文档作为Qt压缩帮助文档,可以加载到Qt助手或创建者中。在Qt Creator中,上下文相关的帮助将像Qt类一样可用。
??这里我们跟常规方式不一样,常规方式是先编译然后加入到项目中,我们是直接源码带入到源码中编译,第一次编译时间会较长,但是后续不暴露qwt的动态库,更重要的时候,当我们灵活切换平台的时候,不需在编译库和引入库上额外花费时间,以达到模块化添加的终极目的—包含模块.pri文件即可。
??查看qwt.pro文件:
??
??所以,包含源码src工程即可,然后查看src.下:
??
??所以包含src.pri即可。
??最终qwt6.2.20.pri模块内容如下:
??
??这时候引入不进去:
??
??需要多做两步骤,如下图:
??
??把所文件前面加上$$PWD(修改之前,请copy一份备份),还得包含pro编译时的三个配置文件,如下图:
??
??最终带qwt6.2.0源码模块如下:
??
??然后qmake,编译(主要检测一下是否移植到工程当作模块化源码成功):
??
??使用-j8不到3分钟就编完了,后续开发中因为此模块作为源码模块包含,在非clean模式下,只需要编译一次,但是避免了不同环境移植工程出现的各种环境问题,让团队成员之间交互,已经模块包含组装最简单化,从而提升沟通效率和开发效率。
模块化
??
基础环境Demo
??这里我们做一个只是调用图的简单使用,用来确认该模块可以被调用,能正常工作,搭建基础模板demo。
演示效果
??
??
初始化源码
void TestWidget::initQwt()
{
_pQwtPlot = new QwtPlot(this);
// 设置背景色
_pQwtPlot->setCanvasBackground(QBrush(QColor(255, 255, 255)));
// 设置x1坐标轴
{
_pQwtPlot->setAxisTitle(QwtPlot::xBottom, "时间(s)");
}
// 设置y1坐标轴
{
_pQwtPlot->setAxisTitle(QwtPlot::yLeft, "采集数值");
}
// 设置绘图区域网格
{
QwtPlotGrid *pGrid = new QwtPlotGrid();
pGrid->setMajorPen(Qt::gray, 1, Qt::SolidLine);
pGrid->attach(_pQwtPlot);
}
// 设置图例
{
QwtLegend *pLegend = new QwtLegend();
pLegend->setDefaultItemMode(QwtLegendData::Checkable);
_pQwtPlot->insertLegend(pLegend, QwtPlot::TopLegend);
}
// 设置曲线0
{
QwtPlotCurve *pCurve = new QwtPlotCurve();
pCurve->setTitle("电压(mV)");
pCurve->setPen(Qt::blue, 2);
pCurve->setRenderHint(QwtPlotItem::RenderAntialiased, true);
// 曲线0符号对象
{
QwtSymbol *pSymbol = new QwtSymbol(QwtSymbol::Ellipse);
pSymbol->setPen(Qt::red);
pSymbol->setSize(4);
}
// 曲线0数据
{
QVector<double> vectorX;
QVector<double> vectorY;
vectorX.append(0); vectorY.append(0);
vectorX.append(1); vectorY.append(2);
vectorX.append(2); vectorY.append(3);
vectorX.append(4); vectorY.append(4);
pCurve->setSamples(vectorX, vectorY);
// 将曲线添加到绘图
pCurve->attach(_pQwtPlot);
}
}
}
基础模板v1.0.0
?? 
入坑
入坑一:融合之后,定义槽函数slots关键字错误
问题
??
原因
??
??由于使用了QT_NO_KEYWORDS宏定义,因此emit、signals、slots都不用使用了,如果想使用信号槽机制的话,必须用宏来代替,分别是Q_EMIT、Q_SIGNALS、Q_SLOTS。
?? 
解决
??直接去掉,不然我们之前的模块将需要大面积更改。
??
??修改后,没发现出现问题,也就这样解决了。