当前位置:网站首页>基于QT的CAN通讯数据实时波形显示(连载八)====“子函数或新类调用ui控件”
基于QT的CAN通讯数据实时波形显示(连载八)====“子函数或新类调用ui控件”
2022-07-30 05:45:00 【透明的光】
前言
主程序里数据传输到新的类里(这里是线程,其他类似)后,需要在里面绘图,这样就需要调用ui界面的控件。网上搜寻到很多方法,都一一试验,但是都没有办法完美的实现,不是这里错,就是那里错。所以有点怀疑是不是自己用了一个假的QT,为啥,不知道,就是参照他们的方法出不来。和高手讨论并且结合网上的例子,搞出来一个可以解决的方法,很好用,并且和上文中的方法一致,很方便。
第一部分:子函数或其他类调用ui控件
第一步:在主函数的ui里建立一个控件,这里使用的是qcustomplot里的控件,这部分不会添加的可以参考前面的文章的方法,很方便并且很简单,步骤都很详细。这里采用了一个提升的widget,现在为qcustomplot类。名字为PLOTVSAMP。其实直接拉一个按钮也是可以的,这个我试验过了,可以的。
第二步:在主函数里,定义函数。第一句上文里已经介绍,在主函数里定义新的类,这个类名字也就是其新起的class名字。至于他是哪个父类的子类不重要。我这里他的父类是线程QThread类。怎么建立参考前面的文章,写的很详细。
mythread = new datadeal(this);
mythread->SetMainWindow( this );第三步:将主函数h文件里的私自成员改为公共成员,这个位置应该很容易找到。为新类调用ui控件做准备。
public:
Ui::MainWindow *ui;第四步:第二步已经设置函数,并没有函数主体,在新类的h文件里加入函数声明与主体,这里定义主窗口的指针(不太合适,就这样看吧,叫法有点问题,方便理解),其实第二步中,this指的就是mainwindow里的指针,这里作为形参放进去,这个就是mainwindow的入口,定义为pwinmain。同时将这个指针赋值为m_pwinmain,这样就将主窗口的指针给了新类中的指针。
public:
void SetMainWindow( MainWindow* pWinMain )
{
m_pWinMain = pWinMain;
}第五步:新类的指向主程序的指针已经有了,再定义这个指针所在的位置和主程序的位置是一样的。
private:
MainWindow* m_pWinMain;第六步:再次用通俗的话解释逻辑:造桥
(1)两块地中间有沟壑,需要两地交流,必须造个桥;
(2)第一块地先造个桥墩,第二块地也造个桥墩;
(3)桥墩上用桥连接。
(4)桥这边的火车和桥那边的火车交换车厢送货,这边的汽车和那边的汽车交换送货。
类似的:
(1)mainwindow的类,和定义的新类,相当于两块地;
(2)火车和汽车,相当于各个类里面的成员,想要送货,必须是火车对火车,汽车对汽车。汽车好比ui控件,火车好比其他定义变量;
(3)两个类必须成员相同,两边都必须有火车和汽车。所以mainwindow的类必须定义新类(第二步),新类必须定义mainwindow的类(第五步);
(4)mainwindow的类定义的setmainwindow相当于桥墩,先一边建好。
(5)setmainwindow里的函数,将两个联系起来,就是桥(第四步)。
这样新类里面的汽车就可以和mainwindow里面的汽车(ui控件)直接送货了。
第七步:用m_p的就可以联想出ui控件了,然后再次画图,里面graph函数之类的参看前面文章,很详细。当然也可以是其他控件,试验过改变按钮的大小和文字,都可以用。
m_pWinMain->ui->PLOTVSAMP->graph(0)->setData(gvUTCms,gvUTCms);
m_pWinMain->ui->PLOTVSAMP->replot();第二部分:总结
总体步骤和《基于QT的CAN通讯数据实时波形显示(连载七)====“不同class数据传输”》里的逻辑相同,这个应该很好理解了。
CAN帧里有毫秒数,将ms数发送给新类(线程),在主程序中启动线程,进行画图,可以得到正确的图形。左侧为前面文章制作的CAN帧显示程序,右侧波形为现在新的class里面在ui界面中绘图。

注:由于小伙伴需要源代码的时间不同,登录邮箱界面太多麻烦,所以建立了一个订阅号,如果有问题或者需要源码,可添加订阅号,留言后会发送源代码或者有任何问题可留言,将积极解决提出的问题。

边栏推荐
- 思谋面试准备
- 卷积神经网络(CNN)之卷积操作、池化操作、激活函数
- Xcode 建立 UIKit 项目(Hello World)
- XMLBean的基础运用
- QT串口动态实时显示大量数据波形曲线(四)========“界面的美化与处理”
- Use kotlin to extend plugins/dependencies to simplify code (after the latest version 4.0, this plugin has been deprecated, so please choose to learn, mainly to understand.)
- 边境的悍匪—机器学习实战:第一章 机器学习的基础知识
- SQL Server Installation Tutorial
- 十一、Kotlin进阶学习:1、集合;2、List操作;3、可变集合——MutableList;4、Set;5、Map;6、MutableMap;
- “R语言+遥感”的水环境综合评价方法
猜你喜欢

常用损失函数(一):Focal Loss

树莓派OpenCV+OpenCV-contrib

nodejs PM2监控及报警邮件发送(二)

Student achievement management system (C language version)

十三、Kotlin进阶学习:内联函数let、also、with、run、apply的用法。

R语言 生态环境领域应用

QT连载3:基于QT和STM32H750的LORA试验平台(2)

标准化(Normalization)知识点总结

Nodejs PM2 monitoring and alarm email (2)

Use kotlin to extend plugins/dependencies to simplify code (after the latest version 4.0, this plugin has been deprecated, so please choose to learn, mainly to understand.)
随机推荐
十四、Kotlin进阶学习:一、内联函数 inline;二、泛型;三、泛型约束;四、子类与子类型;
AAcell五号文档室——跨平台文件传输的小室一间一间的
MySQL window function
QT每周技巧(3)~~~~~~~~~串口添加
配置MMdetection环境并训练
Self-augmented Unpaired Image Dehazing via Density and Depth Decomposition program running record
GraphQL (1) Basic introduction and application examples
点云统计滤波理解
Flink-流/批/OLAP一体得到Flink引擎
十三、Kotlin进阶学习:内联函数let、also、with、run、apply的用法。
Redis publish/subscribe
七、Kotlin基础学习:1、创建类;2、构造函数;3、继承;4、封装;5、抽象类;6、接口;7、嵌套类;8、内部类;9、枚举类
为什么会出现梯度爆炸和梯度消失现象?怎么缓解这种现象的发生?
建造者模式(Swift 实现)
Shardingsphere depots table and configuration example
Jdbc & Mysql timeout analysis
Application of remote sensing, GIS and GPS technology in hydrology, meteorology, disaster, ecology, environment and health
Self-augmented Unpaired Image Dehazing via Density and Depth Decomposition程序运行记录
QT每周技巧(2)~~~~~~~~~界面按钮
联影医疗二面