毕业了,整理下思绪,把我之前在实验室弄的一个Qt终端界面开发的程序的整体思路以及源代码共享开来,以便于更好地让Qt为人所知,为开源贡献点我的微薄之力。
一. 项目介绍
项目背景的简要介绍:通过串口从数据采集板传输数据到终端板上面,自行设计一个界面用来显示收集到的数据,以及画出所对应的坐标点。终端显示界面的板子是基于S3C6410芯片的,板子是师兄根据Mini6410开发板电路图画出来的,做了部分裁剪。
由于考虑到跨平台以及移植性问题,我选择了Qt进行开发,分别开发了Windows以及Linux版本,并且移植到开发板上面。以下截图1,图2所示:
编写控制Qt串口通信终端界面时候,串口通信部分是参考yafeilinux的串口通信教程:http://blog.csdn.net/yafeilinux/article/details/4717706 Windows, Linux需要相应改写第三方类,yafeilinux里面已经有介绍。由于我要用的poll查询机制,利用settime(sec),因此更改了”*_qextserialport.cpp”文件里面的对应函数,如下图3所示:
下图是Windows下的项目文件截图:
二. Windows平台编写过程
整个项目我是利用QT的designer和手写代码互相配合完成的。新建了一个带有ui的项目以后,添加第三方串口类源文件。在ui里面画出相应的东西,我是用了tabWidget来切换几个界面,在主界面中还用了tableView表格来显示各个参数,如上图1所示,对应的源程序代码如下。
头文件mainwindow.h,定义声明了各种类和变量。
1 | //******************* mainwindow.h ************// |
mainwindow.cpp文件,具体实现各个子函数的功能。
1 | //****************************** mainwindow.cpp *****************// |
coordinate.cpp文件中,由于我是在tabWidget里面绘图的,不能直接调用QPainter类,相应的解决方法有两种:方法(1): 在子窗口ui.—派生一个类,在PaintEvent里画图。 我所遇到的问题:不清楚自己构造的派生类如何跟ui.—相关联起来,归根到底就是自己C++使用得不熟悉。方法(2):事件过滤法。给ui.—安装事件监视器,在QEvent::paint事件时QPainter paint(ui->—)画图。我使用的是第二种方法。
坐标图显示如下图4所示,由于在QT里面慢慢画直线、弧线等各种坐标点很麻烦,工作量大,因此我就确定好尺寸后,用PS自己弄了背景图片,计算好相应的坐标点,直接在上面显示目标点。
1 | //*************************** coordinate.cpp ********************* |
main.cpp文件
1 | //************************ main.cpp *****************// |
三、Linux版本
我是在Fedora9 里面进行Linux版本的编写的,只需把相应的第三方类修改,相对应的定义也改掉,串口名称那里也要改,并添加前缀“/dev”,其他部分相同。
四、移植到Mini6410上面运行
移植前需要修改下项目文件里ui的串口名称,改成ttySAC0, ttySAC1….之类的,然后在安装了交叉编译链,Qt4.7交叉编译环境后,在Qt里面选择对应的编译链进行编译,具体做法参见《Mini6410 Qt4和Qtopia编程开发指南》。
五、总结
从接手项目任务到完成大概花了3个月时间,期间由于其他事情断断续续地编程,Qt知识是从零开始学习的,以及由于个人C++水平有限,编写的程序可能会不合理的地方,忘高手指导。通过完成此次的项目,我对于C++的学习又深入一步,以及学会了Qt这种跨平台的SDK。我会分别把Windows版本,Linux版本的源文件上传上来,供大家参考,互相学习。(备注:Linux版本的由于当初是直接在实验室弄好,跟今天修改的Windows版本略有不同,因为当初是为了考虑嵌入式开发板的屏幕小,把选择串口参数部分去掉,直接在程序里面默认设定好了,需要修改的同学直接在里面修改即可。)
Windows版本:http://download.csdn.net/detail/jjzhoujun2010/4393863
Linux版本:http://download.csdn.net/detail/jjzhoujun2010/4393867
《Mini6410 Qt4和Qtopia编程开发指南》:http://download.csdn.net/detail/jjzhoujun2010/4393908
原创文章,欢迎转载,转载请注明:ifish.site
原始CSDN博客已经迁移,原路径:CSDN
作者:JaydenZhou