#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
}