4.01以及之前
- 完成自定义标题
包括最大化最小化关闭以及伸缩放大 - 正视布局
如果是代码编写的界面,可以自己定义widget(或者其他类),不用像ui一样需要“提升为”这个动作实现自定义标题,其实现在来看用ui也是可以实现的,但开始的基础较弱,所幸一股脑的全用代码了,也当锻炼锻炼基础。直接利用verticalLayout->addWidget/addLayout便可以实现不同控件的连接。
需要注意的是:指针型->需要new,,即对应的实例化 - 学会使用connect
包括qt4 以及 qt5 的写法,同时了解到connect函数第五个参数在多线程中使用较广。这里也感谢小猪老师的文档,以后有空再整理吧。 - tcp套接字的连接
服务端、客户端,我方主要作为客户端,接收数据的缓存池没有处理好。 - Qchart与ChartView实现简单的图形绘制
功能较为简单,实时调试时数据量一大就卡死。
4.02
学了一天,发现刚开始数据量小些,之后数据量加大(比如1s发送200个或者更多),程序表现还是较可以的,也没有crashed(后期发送10000个也没崩),但是数据接收上会发现绘制线条出现丢数据的现象。
4.03
学了一天,受昨晚启发,利用QCustomplot绘图,利用某位大佬的包,能实现光标显示,全屏自适应显示,感觉界面也更优化。但是新问题又出现了:数据量稍微大一点界面就卡的要死,三牛也没响应,在实时数据这一块还不如Qchart的表现呢!
4.04
开始尝试线程,qt4和5的写法又有区别,还好b站大佬的课程详细。最终用的5的写法,跨线程传输数据,emit signal可以携带数据,同时多线程通信一定要用connect。
性能:收数据不会崩了,但是画图有点掉数据。。。
哦更过分的是,配置了半天OpenGL,想提高一下画图的性能,也失败了。。。。
4.05
vs2022卸载,重下2017;qt creator也重新配置上了msvc2017编译器,编译速度的确有所加快,不过出现了C2001问题,编码方式的不同导致中文居然出bug,几经折腾还好在csdn上找到了资料,但是某些中文字符表现还是令人难过,而且数据量一大,界面还是会崩……是电脑处理器的频率跟不上吗。。。。
链接:C2001错误.
4.15
进步飞速,解决了卡顿问题,还进行了傅里叶分析:fft算法、mkl库调用、ftw调用……同时发现Qcustomplot中的addData函数里可以设置计数器,当数据量足够大时,比如我是1024个数据一包一包的发,那我可以收到512个数据再调用**replot()**函数。注意这一过程最好是与每次要显示的点数成倍数关系,不要出现空档——ex
//绘制512个点就清屏(频谱)
addData如果add到200个点就replot()会发现频谱图越来越短,直到看不见,因为200,200,112+78 ,clear()……
//所以后来改成add到512个点再replot()就刚好能显示完整的频谱。
- 提高Qcustomplot的绘图的方法总结:
- addData()函数中设置计数器,比如512个点再调用replot ()函数。绘图时间有变快很多。
受启发链接.
pGraph->addData(x, y);
//新加xx个数据则replot一次
numberCount ++;
if(numberCount == 512) //结合频域数据,刚好512个点刷新一次
//其他数会出现空白…… 比如100,就会满100便绘制,512总有数据绘制不出来
{
// this->replot();
this->replot(QCustomPlot::rpQueuedReplot); //对应方法3
numberCount = 0;
}
- 本人要绘制的频谱图有对称性,所以只绘制一半长度即可,也就是说要绘制的数据量越少,绘制时间越少。
for(int m = 0; m<vecFreqData2.size()/2;m++)
{
freqPlot->addData(0, (xFreq++)* tick, vecFreqData2[m]);
}
- 从Qcustomplot角度进行设置,一位大佬的博客:
链接: Qcustomplot绘图效率提升.