在线问答
直播中

杨永胜

11年用户 2379经验值
擅长:嵌入式技术
私信 关注

【OK210试用体验】+第十五篇☞qt4下串口gui初步

本帖最后由 iysheng 于 2015-9-20 17:10 编辑

说实话,我感觉gui编程真的很难,看了这么些天,感觉里面的内容真的太复杂了,看书看的我的头都大了。今天下午,依旧是作在这里看书,编程,从书上看到了一个简单的显示的例子,经过的我的修改,感觉串口部分的大的框架应该算是有了吧。
本次,界面是在designer上完成的。
中间的过程如下:
widget下,我定义了一个lable,一个button(名字命名为receive
button通过信号插槽机制连接从串口接收字符串函数。在本次中, 我把他定义为send函数。如下:
des.PNG

创建好widget后,记得改名字,objectName改后MyWidgetwindowtitle改为Serial Port Assistant。如下:
de6.PNG de5.PNG
插槽和信号的连接机制实现如下:
首先右键鼠标,选择change signal/slots
的1.PNG

然后,添加slots函数send()
de2.PNG

接下来,就是创建连接了,按F4(快捷键),点击button,在空白处释放,选择click和send函数,如下所示:
de3.PNG

最后呈现效果如下:
de4.PNG

到此,界面部分就算是完成了。模拟显示(ctrl+R)如下:
mn.PNG
接下来就要到具体代码了,本次主要定义了三个函数mywidget.cpp mywidget.h main.cpp

具体如下:首先是mywidget.h
  1. #ifndef MYWIDGET_INCLUDED
  2. #define MYWIDGET_INCLUDED

  3. #include
  4. #include "ui_mywidget.h"

  5. class MyWidget:public QWidget{
  6.     Q_OBJECT
  7. public:
  8.     MyWidget();
  9.     int aopen();
  10.     virtual ~MyWidget();
  11. private:
  12.     int fd;
  13.     Ui::MyWidget ui;
  14. public slots:
  15.     void send();
  16. };

  17. #endif


接下来就是mywidget.cpp函数了
  1. #include "mywidget.h"
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #include
  10. #include
  11. #include

  12. MyWidget::MyWidget()
  13. {
  14.     ui.setupUi(this);
  15. }

  16. MyWidget::~MyWidget()
  17. {
  18. }
  19. int MyWidget::aopen()
  20. {
  21.         QLabel *label = ui.label;
  22.         struct termios uart1;
  23.          const char er[] = "failed!";
  24.         fd = open("/dev/s3c2410_serial0", O_RDWR|O_NOCTTY);//以读写方式打开设备
  25.         if (fd == -1){
  26. label->setText(QString(er));//如果打开串口失败,通过lable显示错误信息。
  27.                 return errno;}
  28.         tcgetattr(fd, &uart1);        
  29.         uart1.c_lflag &= ~(ECHO|ECHOE|ISIG|ICANON);
  30.         uart1.c_oflag &= ~OPOST;
  31.         tcsetattr(fd, TCSANOW,&uart1);//设置串口
  32. }

  33. void MyWidget::send()
  34. {
  35. int rb;
  36.     QLabel *label = ui.label;
  37. char c;
  38. rb = read(fd, &c, 1);        
  39.         label->setText(QString(QChar(c)));//通过lable显示串口接受到的字符。
  40. }
最后,就是main函数了,这个函数好像是有一顶的模板的,如下所示:
  1. #include
  2. #include "mywidget.h"
  3. #include "ui_mywidget.h"

  4. int main(int argc, char *argv[])
  5. {
  6.     QApplication app(argc, argv);
  7.     MyWidget wdg;//定义一个成员变量
  8.     wdg.aopen();//执行打开串口函数
  9.     wdg.show();//显示
  10.     return app.exec();//启动主事件循环
  11. }
至此,函数部分我们需要写的都已经写完了,接下来的事情就要交给qt的一些工具了,首先执行:
qmake -project
然后
qmake
最后
make
至此,执行完毕,就生成了可执行文件,如下图所示:
qtm.PNG

接下来就是需要在虚拟帧缓存中运行了,
执行qvfb&
然后执行
./uart(这是我的代码生成的可执行文件) -qws
效果如下:
test.PNG

点击Receive,接收数据,界面变化如下所示:
test1.PNG

由于,我只是在电脑上面仿真的,还没有在开发板上运行,更谈不上要串口接受数据了,所以显示了一个乱码。至此,整个框架,我自己感觉算是出来了吧。加油!


更多回帖

发帖
×
20
完善资料,
赚取积分