本帖最后由 iysheng 于 2015-9-23 08:23 编辑
今天晚上,至此,我自己感觉可以暂时告一段落了,距离我发第一篇帖子,足足两个月了,其间有痛苦(有时候一个问题好些天都不能解决,那一段时间晚上睡觉都睡不好),但是,不管是向牛人请教还是在网上搜寻对自己有用的信息,期间的感觉不好说的很清楚,但是,可以肯定的是,当我把好几天的问题解决的那一刹那,心里面满满充斥的高兴与激动,或许那是真的,你付出的越多,当时收获的时候,你的心情就越激动,所以这也是一个相互制约的过程。我希望可以继续在这条道路上前行,既然选择了远方,就要风雨兼程,今天,也刚好是我们学校开学典礼的日子,在会上我也听到了有人引用这句话。
好了,废话也不说太多了,通过在上次的程序和界面上的修改,这次程序整个算是可以实现了。
首先我把显示时间那部分
label,换成了Line Edit,label部分知识显示我的一个标题
iysheng‘s GPS clock。然后,我又添加了一个
信号和插槽的链接,这样可以在串口读到数据后就实时的显示出来。
界面部分,变化如下:
接下来就是主要的代码部分了,main函数,我没有修改。主要是修改了mywidget.cpp和mywidget.h两个文件,分别如下:
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;
- char c[3];//显示时间小时的数组,实际也是字符串,c[2]='\0'
- char c1[3];//显示时间分钟的数组,实际也是字符串,c[2]='\0'
- char c2[3]; //显示时间秒的数组,实际也是字符串,c[2]='\0'
- Ui::MyWidget ui;
- public slots:
- void send();
- };
- #endif
mywidget.cpp代码如下
- #include "mywidget.h"
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include tifier>
- MyWidget::MyWidget()
- {
- ui.setupUi(this);
- }
- MyWidget::~MyWidget()
- {
- }
- int MyWidget::aopen()
- {
- QLineEdit *lineEdit4 = ui.lineEdit4;
- struct termios uart1;
- QSocketNotifier *sn;
- const char er[] = "failed!";
- const char su[] = "success!";
- fd = open("/dev/s3c2410_serial0", O_RDWR|O_NOCTTY);//以读写方式打开设备
- if (fd == -1){
- lineEdit4->setText(QString(er));//提示打开串口错误
- return errno;}
- else
- lineEdit4->setText(QString(su));//提示成功打开串口
- tcgetattr(fd, &uart1);
- uart1.c_lflag &= ~(ECHO|ECHOE|ISIG|ICANON);
- uart1.c_oflag &= ~OPOST;
- tcsetattr(fd, TCSANOW,&uart1);
-
- sn = new QSocketNotifier(fd, QSocketNotifier::Read, this);
- connect (sn, SIGNAL(activated(int)), this, SLOT(send()));//创建串口接受数据和显示之间的信号插槽的连接
-
- c[0] = '1';
- c[1] = '9';
- c[2] = '\0';//字符串的结束字符
- c1[0] = '4';
- c1[1] = '9';
- c1[2] = '\0';//字符串的结束字符
-
- c2[0] = '0';
- c2[1] = '9';
- c2[2] = '\0';//为了模拟效果,进行的初始化
- return 0;
- }
- void MyWidget::send()//整个大的数据提取的过程是从我的第十三篇帖子中复制过来的
- {
- int rb;
- char flag;
- char num[6] = {0,0,0,0,0,0};
- char time[10] = {0,0,0,0,0,0,0,0,0,0};
- QLineEdit *lineEdit = ui.lineEdit;
- QLineEdit *lineEdit1 = ui.lineEdit1;
- QLineEdit *lineEdit2 = ui.lineEdit2;
-
- rb = read(fd, &flag, 1);
- if (flag == '美元符号'){
- rb = read(fd, num, 5);
- num[5]='\0';
- if (strcmp(num, "GPGGA") == 0)
- {
- read(fd,time,10);
-
- c[0] = time[1];
- c[1] = time[2];//给小时数据赋值
- c1[0] = time[3];
- c1[1] = time[4];//给分钟数据赋值
- c2[0] = time[5];
- c2[1] = time[6]; //给秒数据赋值
- }
- }
-
- c2[0] += 1;//通过按键Time,模拟信号插槽,实现数据的变化,
-
-
- lineEdit->setText(QString(c));//显示小时
- lineEdit1->setText(QString(c1));//显示分钟
- lineEdit2->setText(QString(c2));//显示秒
- }
整个代码就如上面所示。
接下来就是执行如下命令,
qmake
qmake -project
make
截图如下:
接下来就是
仿真运行,如下所示(由于我没有外接屏幕,更不会有串口接受数据,所以,我通过按键触发信号,实现send()函数的执行,中间我截取了两张图片):
效果还是不错的,就是Hour那个地方出现了些许
乱码,通过按键Time实现了加1的运算(只是为了测试),和预期符合。
最后,我再附上一张显示良好的截图。如下:
所以,至此,我的项目算是告一段落了。仔细想想这两个月的时间,
有苦也有甜。