• 6958阅读
  • 2回复

请问大家此段程序为什么不能显示串口的内容 [复制链接]

上一主题 下一主题
离线woshini12345
 
只看楼主 倒序阅读 楼主  发表于: 2012-10-20
#include "widget.h"
#include "ui_widget.h"
#include<Windows.h>
#include <QDebug>
#include <QPainter>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    setWindowTitle("test");
}

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

void Widget::on_pushButton_clicked()
{
    #ifdef Q_WS_WIN
    HANDLE hCom;
    hCom=CreateFileA("COM1",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
    if(hCom == INVALID_HANDLE_VALUE)
    {
      
         MessageBox(NULL,TEXT("line"),TEXT("HAHA YOYO"),MB_OK);
        
        return;
    }
     SetupComm(hCom,1024,1024); //输入缓冲区和输出缓冲区的大小都是100

    COMMTIMEOUTS TimeOuts;

    TimeOuts.ReadIntervalTimeout = MAXDWORD;
    TimeOuts.ReadTotalTimeoutMultiplier = 0;
    TimeOuts.ReadTotalTimeoutConstant = 0;
    


    
    TimeOuts.WriteTotalTimeoutMultiplier = 100;
    TimeOuts.WriteTotalTimeoutConstant = 500;
    SetCommTimeouts(hCom, &TimeOuts); //设置超时

    DCB dcb;
    GetCommState(hCom,&dcb);
    dcb.BaudRate = 9600; //波特率为9600
    dcb.ByteSize = 8; //每个字节有8位
    dcb.Parity = NOPARITY; //无奇偶校验位
    dcb.StopBits = TWOSTOPBITS;
    SetCommState(hCom,&dcb);

    PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
    
    OVERLAPPED m_osRead;
    memset(&m_osRead,0,sizeof(OVERLAPPED));
    m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

    COMSTAT ComStat;
    DWORD dwErrorFlags;
    
    char str[100];
    memset(str,'\0',100);
    DWORD dwBytesRead=100;//读取的字节数
    BOOL bReadStat;

    ClearCommError(hCom,&dwErrorFlags,&ComStat);
    dwBytesRead = min(dwBytesRead,(DWORD)ComStat.cbInQue);
    bReadStat = ReadFile(hCom,str,dwBytesRead,&dwBytesRead,&m_osRead);
        
     PurgeComm(hCom, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
         for(int i=0;i<100;i++)
         {
           QString s=str;
           ui->label->setText(s);
         }

       #endif
      
      
        

      

}
离线lvhuat
只看该作者 1楼 发表于: 2013-01-06
额,太多Window API了,忘完了
离线realfan

只看该作者 2楼 发表于: 2013-02-06
有现成的qextserialport,写得很好了。就没必要自己找麻烦了
快速回复
限100 字节
 
上一个 下一个