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

奇怪的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();

//读取串口缓冲区的所有数据给临时变量temp

ui->textBrowser->insertPlainText(temp);

//将串口的数据显示在窗口的文本浏览器中

}


MainWindow::~MainWindow()
{
    delete ui;
}




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

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

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

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