Qt 串口通信程序全程图文是本文介绍的内容,本节也是最后一节,本节主要讲述的是解决一下重要问题的说明:
(下面所说的第一个程序是指第一节中写的那个程序,第二个程序是指第三节更改完后的程序,第三个程序是指第四节更改完后的程序。)
问题一:更改第一个程序中的代码。
- struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};
- myCom = new Win_QextSerialPort("com1",myComSetting,QextSerialBase::EventDriven);
这两行代码如果换为下面一行:
- myCom = new Win_QextSerialPort("com1",QextSerialBase::EventDriven);
你再运行一下程序,是不是还能用?那是说明我们的串口设置的结构体myComSetting没有用吗?你可以把上面的结构体里的波特率由9600改为115200,如果这个结构体有用,那么程序不可能再接收到数据,不过,你再运行一下程序,是这样吗?
如此看来,我们对串口进行的设置果真没用,那默认的串口设置是什么呢?我们先看下一个问题。
问题二:同时打开第三个程序和第二个程序。
(注意:两个程序的串口不能同时打开,所以打开一个程序的串口时要将另一个程序的串口关闭。)
我们先在第三个程序上按默认设置打开串口,发送数据1。然后关闭串口,在第二个程序上打开串口,发送数据1。可以看到两个程序上接受到的信息都正确。如下图。
我们关闭第二个程序上的串口,再将第三个程序上设置为奇校验,然后打开串口,发送数据1,可以看到其收到的数据显示乱码。这时我们关闭第三个程序上的串口,打开第二个程序上的串口,发送数据1,你会惊奇地发现,它收到的信息也是乱码。如下图。
这到底是怎么回事呢?我们也可以去网上下载其他的串口助手进行实验,也可以改变波特率进行实验。由所有的结果得出的结论只能是:我们用那个结构体作为参数传过去后,并没有对串口进行设置,而程序运行使用的串口设置是系统以前保留的设置。那么,为什么会这样呢?我们看下面的一个问题。
问题三:更改第三个程序中的代码。
- myCom ->open(QIODevice::ReadWrite);
放到设置串口的语句之后,
- connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));
这句之前,然后再运行程序。你会发现程序的串口设置功能已经不起作用了。现在知道原因了吧?!
其实,上面的三个问题是一个问题,它的结论是,写串口程序时,要先打开串口再对它进行设置,不然设置就不会起作用。所以,这里应该说明,第一个和第二个程序都是不太正确的,正确的方法应该是像第三个程序一样,先定义Win_QextSerialPort类对象,然后打开串口,再用那几个设置函数对串口进行设置。
到这里,整篇文章就结束了。对于其中的一些问题也只是我个人的观点,由于水平有限,所以理解上可能会有偏差,或者错误,还请广大网友批评指正。我写这篇文章的目的只是想让Qt初学者能更轻松的用Qt写出串口通信程序,及掌握Qt写程序时的一些技巧。如果你从我的文章中学到了一个知识点,那么我的这篇文章就有它的意义了。
最后,如果你喜欢我的写作风格,并且初学Qt,可以在我的空间查看Qt Creator系列教程,希望能对你的入门有所帮助。
到这里可以下载本文的PDF文档:http://download.csdn.net/source/1763251
小结:关于Qt 串口通信程序全程图文的内容本节介绍完了,希望本文对你有所帮助,关于串口的更多内容,请关注编辑推荐。(连载)