Qt实现动态曲线作图

尝试一波Qt的作图类功能,嗯,今天还确实对这玩意有了一点深入的理解,将一些固定的创建初始化代码集成起来,封装在类里面,后续直接调用即可,简单方便,具体今天是如何实现的,慢慢说

本来计划测试一波CPU温度,做个界面,网上似乎没有啥好的教程,于是,在Qc的软件推送界面挑来挑去,觉得动态曲线显示有点意思,而且后续的工作也很有可能能够用得到,所以尝试了复现一波,所谓复现自然是在现有代码的基础上进行的

但是过程似乎没有想象的那么顺利,直到晚上11:00左右,才把能用的代码调试出来,同时稍微捋清楚了一点思路!

作图需要有的是,QChart、QSplineSeries、QValueAxis、QChartView等等,实际上,如果撇开类的封装性,这些都可以在主函数里直接实现,但是,大型的工程代码貌似不太可能,因此将其封装起来是对的

在类里面定义如下的变量代码

QSplineSeries *m_series;

QValueAxis *m_axisX;
QValueAxis *m_axisY;

qreal m_step;
qreal m_x;
qreal m_y;

如果说QSplineSeries是平滑曲线类的话,那么QValueAxis见名貌似是坐标系相关,qreal貌似是点集,这点暂且如此猜测

在解析函数里暂且初始化一波变量,毕竟在调用类声明时,解析函数自动运行,应该没有什么比放在里面初始化更好的了

m_series(0),
m_axisX(new QValueAxis()),
m_axisY(new QValueAxis()),
m_step(0),
m_x(5),
m_y(1),

依赖于类的高度封装性质和友好的接口形式,将一些界面初始化问题在里面具体实现,主要是上述变量的配置以及关联等,首先是QSplineSeries的一些基本配置,含颜色、线宽、点集等

QChart *chart;

这里是一个公用接口,原本放在私有里面,后来调试的时候放在共有里面了,这里在封装类里面将其初始化以及关联

chart->addSeries(m_series);
chart->addAxis(m_axisX,Qt::AlignBottom);
chart->addAxis(m_axisY,Qt::AlignLeft);

关联曲线、关联坐标,曲线也要和坐标关联同时本身又有相应的属性设置,就是两两的相互关系,一共关联三次,同时自己又设置自身三次

主函数里面又如何调用基于基类封装类呢?这里的基类显然是建立工程的时候选择的QMainWindow,而新建的MainWindow

class MainWindow : public QMainWindow

显然继承了基类的公有性质,同时附加了自己的一些性质,这些性质就是前面解释的作图变量类相关的引用以及一些变量的定义,无论公有还是私有!

因此,主函数里面初始化的时候,不应该是 QMainWindow而是MainWindow,并且以变量而非指针的模式初始化(指针的时候貌似有点问题)

由于类里的解析函数,定义即实现初始化,因此主函数里面的工作量挺少

MainWindow window;

利用该类直接关联相应的窗体显示即可

QChartView chartView(window.chart);
chartView.setRenderHint(QPainter::Antialiasing);
window.setCentralWidget(&chartView);

上述代码实现了一个基本的图标背景,但是动态效果并不能完成,具体的实现需要依靠定时器刷新,而具体是如何刷新的请移步下一篇博文

代码下载链接在下方,实则是对官方代码的复述,有兴趣的可以下载

发表评论

电子邮件地址不会被公开。 必填项已用*标注