当前位置:网站首页>基于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界面中绘图。

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

边栏推荐
- 十五、Kotlin进阶学习:一、子类与子类型;二、协变;三、逆变;
- Biome-BGC 生态系统模型与应用
- Xcode 绑定按钮点击事件
- Atmospheric particulate matter PMF source analysis
- 边境的悍匪—机器学习实战:第七章 集成学习和随机森林
- CLUE Model Construction Method, Model Validation and Land Use Change Scenario Prediction
- TDengine cluster construction
- 目标检测中的知识蒸馏方法
- 使用kotlin扩展插件/依赖项简化代码(在最新版本4.0以后,此插件已被弃用,故请选择性学习,以了解为主。)
- Configure MMdetection environment and train
猜你喜欢

CLUE Model Construction Method, Model Validation and Land Use Change Scenario Prediction

Redis 发布/订阅

目标检测中的知识蒸馏方法

Trust anchor for certification path not found.异常解决方法。

Flink-流/批/OLAP一体得到Flink引擎

Target detection, object classification and semantic segmentation of UAV remote sensing images based on PyTorch deep learning

FPGA解析B码----连载2

Xcode 绑定按钮点击事件

九、Kotlin基础学习:1、Companion的扩展方法和扩展属性;2、一般类的扩展方法和扩展属性;3、委托;

大气颗粒物 PMF 源解析
随机推荐
R - GIS: how to use R language implementation of GIS geospatial analysis and model prediction
MySQL window function
用pop3收取gmail的邮件
Function 函数式接口及应用
边境的悍匪—机器学习实战:第十五章 使用CNN和RNN处理序列
什么是过拟合、欠拟合现象以及如何缓解?
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.)
【总结】工业检测项目中如何选择合适的损失函数
边境的悍匪—机器学习实战:第七章 集成学习和随机森林
GraphQL(一)基础介绍及应用示例
新导则下 防洪评价报告编制方法及洪水建模(HEC-RAS)
Twenty-two, Kotlin advanced learning: simply learn RecyclerView to achieve list display;
基于OpenCV的双目重建
二十二、Kotlin进阶学习:简单学习RecyclerView实现列表展示;
基于MATLAB 2021b的机器学习、深度学习
QT连载3:基于QT和STM32H750的LORA试验平台(2)
Arthas command parsing (jvm/thread/stack/heapdump)
Atmospheric particulate matter PMF source analysis
C语言学习经验
Self-augmented Unpaired Image Dehazing via Density and Depth Decomposition program running record