本帖最后由 iysheng 于 2015-9-20 17:10 编辑
说实话,我感觉gui编程真的很难,看了这么些天,感觉里面的内容真的太复杂了,看书看的我的头都大了。今天下午,依旧是作在这里看书,编程,从书上看到了一个简单的显示的例子,经过的我的修改,感觉串口部分的
大的框架应该算是有了吧。
本次,界面是在
designer上完成的。
中间的过程如下:
在
widget下,我定义了一个
lable,一个
button(名字命名为receive)。
button通过信号插槽机制连接从
串口接收字符串函数。在本次中, 我把他定义为send函数。如下:
创建好widget后,记得改名字,
objectName改后MyWidget,
windowtitle改为Serial Port Assistant。如下:
插槽和信号的连接机制实现如下:
首先右键鼠标,选择
change signal/slots
然后,添加
slots函数send()
接下来,就是创建连接了,按
F4(快捷键),点击
button,在空白处释放,选择
click和send函数,如下所示:
最后呈现效果如下:
到此,界面部分就算是完成了。模拟显示(
ctrl+R)如下:
接下来就要到具体代码了,本次主要定义了三个函数
mywidget.cpp mywidget.h main.cpp。
具体如下:
首先是mywidget.h
- #ifndef MYWIDGET_INCLUDED
- #define MYWIDGET_INCLUDED
- #include
- #include "ui_mywidget.h"
- class MyWidget:public QWidget{
- Q_OBJECT
- public:
- MyWidget();
- int aopen();
- virtual ~MyWidget();
- private:
- int fd;
- Ui::MyWidget ui;
- public slots:
- void send();
- };
- #endif
接下来就是mywidget.cpp函数了
- #include "mywidget.h"
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- MyWidget::MyWidget()
- {
- ui.setupUi(this);
- }
- MyWidget::~MyWidget()
- {
- }
- int MyWidget::aopen()
- {
- QLabel *label = ui.label;
- struct termios uart1;
- const char er[] = "failed!";
- fd = open("/dev/s3c2410_serial0", O_RDWR|O_NOCTTY);//以读写方式打开设备
- if (fd == -1){
- label->setText(QString(er));//如果打开串口失败,通过lable显示错误信息。
- return errno;}
- tcgetattr(fd, &uart1);
- uart1.c_lflag &= ~(ECHO|ECHOE|ISIG|ICANON);
- uart1.c_oflag &= ~OPOST;
- tcsetattr(fd, TCSANOW,&uart1);//设置串口
- }
- void MyWidget::send()
- {
- int rb;
- QLabel *label = ui.label;
- char c;
- rb = read(fd, &c, 1);
- label->setText(QString(QChar(c)));//通过lable显示串口接受到的字符。
- }
最后,就是main函数了,这个函数好像是有一顶的模板的,如下所示:
- #include
- #include "mywidget.h"
- #include "ui_mywidget.h"
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- MyWidget wdg;//定义一个成员变量
- wdg.aopen();//执行打开串口函数
- wdg.show();//显示
- return app.exec();//启动主事件循环
- }
至此,函数部分我们需要写的都已经写完了,接下来的事情就要交给qt的一些工具了,首先执行:
qmake -project
然后
qmake
最后
make
至此,执行完毕,就生成了可执行文件,如下图所示:
接下来就是需要在虚拟帧缓存中运行了,
执行
qvfb&
然后执行
./uart(这是我的代码生成的可执行文件) -qws
效果如下:
点击
Receive,接收数据,界面变化如下所示:
由于,我只是在电脑上面
仿真的,还没有在
开发板上运行,更谈不上要串口接受数据了,所以显示了一个乱码。至此,整个框架,我自己感觉算是出来了吧。加油!