读书人

奇怪的Qt串口接收有关问题

发布时间: 2012-03-23 12:06:21 作者: rapoo

奇怪的Qt串口接收问题
我参考了以下例程:
http://hi.baidu.com/her02008/blog/item/263cc213501049cbf6039e47.html

C/C++ code
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    struct PortSettings myComSetting = {BAUD115200,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};    //定义一个结构体,用来存放串口各个参数    myCom = new Win_QextSerialPort("com3",myComSetting,QextSerialBase::EventDriven);    //定义串口对象,并传递参数,在构造函数里对其进行初始化    myCom ->open(QIODevice::ReadWrite);    //以可读写方式打开串口    connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));    //信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作}void MainWindow::readMyCom()     //读串口函数{QByteArray temp = myCom->readAll();//读取串口缓冲区的所有数据给临时变量tempui->textBrowser->insertPlainText(temp);//将串口的数据显示在窗口的文本浏览器中}MainWindow::~MainWindow(){    delete ui;}


插上串口,Qt窗口接收不到单片机(MSP430)传出来的数据。但是这时候,打开串口调试助手,可以接收到数据,关闭串口助手,再次打开Qt程序,程序也可以接收到数据了!
如果把串口数据线拔掉重新插上,又会出现原来的问题。

[解决办法]
我碰到过类似的问题,貌似这个类的构造函数对串口参数的初始化不成功。
你试试打开串口后,手动调用setBaudRate、setParity等函数,再配置一遍参数。

你用串口调试助手打开串口,事实上已经初始化参数了,再打开你写的程序,自然可以正常使用了。

[解决办法]
我也做过串口的调试程序,对于楼主的疑问,我想应该是这个问题,在那篇文章的最后有这么一段话:其实,上面的三个问题是一个问题,它的结论是,写串口程序时,要先打开串口再对它进行设置,不然设置就不会起作用。所以,这里应该说明,第一个和第二个程序都是不太正确的,正确的方法应该是像第三个程序一样,先定义Win_QextSerialPort类对象,然后打开串口,再用那几个设置函数对串口进行设置。
http://blog.csdn.net/yafeilinux/article/details/4717706这是文章链接。
其实楼主不必要非要用这个第三方类的,在Google仓库里有很多其他第三方类的,而且有的还是在实时维护着呢,我们就是换了另外一个第三方库,比这个好用的。

读书人网 >QT开发

热点推荐