实例介绍
【实例简介】
【实例截图】
【核心代码】
#include "mycommdialog.h" #include "ui_mycommdialog.h" #include<QTimer> mycommDialog::mycommDialog(QWidget *parent) : QDialog(parent), ui(new Ui::mycommDialog) { ui->setupUi(this); time_ReadSerialPort = new QTimer(this); time_Datafresh = new QTimer(this); ui->comboBoxBaudRate->addItem("9600"); ui->comboBoxBaudRate->addItem("38400"); ui->comboBoxBaudRate->addItem("57600"); ui->comboBoxBaudRate->addItem("115200"); ui->comboBoxBaudRate->setCurrentIndex(3); ui->comboBoxDataBits->addItem(QString("7位")); ui->comboBoxDataBits->addItem(QString("8位")); ui->comboBoxDataBits->setCurrentIndex(1); ui->comboBoxStopBits->addItem(QString("1位")); ui->comboBoxStopBits->addItem(QString("2位")); ui->comboBoxStopBits->setCurrentIndex(0); ui->comboBoxCheckBits->addItem("N"); ui->comboBoxCheckBits->addItem("O"); ui->comboBoxCheckBits->addItem("E"); ui->comboBoxCheckBits->setCurrentIndex(0); ui->comboBoxPort->addItem("ttyUSB0"); ui->comboBoxPort->addItem("ttyUSB1"); ui->comboBoxPort->setCurrentIndex(0); ui->pushButtonCloseCom->setEnabled(false); ui->pushButtonLed0->setEnabled(false); ui->pushButtonLed1->setEnabled(false); //以可读写方式打开串口 //定义一个结构体,用来存放串口各个参数 //信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作 connect(this,SIGNAL(nowStartSerialPort(bool)),&commThread,SLOT(set_SerialPortFullLoad(bool))); connect(this,SIGNAL(writeToSerialPort(unsigned char * , int )),&commThread,SLOT(readyWriteSerialPort(unsigned char * , int))); connect(&commThread,SIGNAL(sendDataToUI( unsigned char*, int)),this,SLOT(recieveDataFromSerialPort ( unsigned char * , int))); connect(&commThread,SIGNAL(sendDataToServer( unsigned char*, int)),&sockThread,SLOT(recieveDataFromSerialPort ( unsigned char * , int))); connect(this,SIGNAL(nowStartCommHost( QString , int )),&sockThread,SLOT(readyCommHost( QString , int ))); connect(this,SIGNAL(writeToHost(unsigned char * , int )),&sockThread,SLOT(readyWriteToHost(unsigned char * , int))); connect(&sockThread,SIGNAL(sendDataToUI( unsigned char*, int)),this,SLOT(recieveDataFromHost ( unsigned char * , int))); connect(this,SIGNAL(SetPort( int )),&commThread,SLOT(setPort( int))); connect(this,SIGNAL(SetBaudRate( int )),&commThread,SLOT(setBaudRate( int))); connect(this,SIGNAL(SetDataBits( int )),&commThread,SLOT(setDataBits( int))); connect(this,SIGNAL(SetStopBits( int )),&commThread,SLOT(setStopBits( int))); connect(this,SIGNAL(SetCheckBits( int )),&commThread,SLOT(setCheckBits( int))); } mycommDialog::~mycommDialog() { delete ui; } void mycommDialog::recieveDataFromSerialPort( unsigned char * buff, int len) { if(len==sizeof(DataBuf1)) { DataBuf1 * rxdata = (DataBuf1 *)buff; unsigned int temp =( unsigned int) rxdata->data.tValue; unsigned int hum = (unsigned int)rxdata->data.hValue; hum = hum & 0x0000ffff; temp = temp & 0x0000ffff; ui->lineEditTemp->setText(QString::number(temp)); ui->lineEditHum->setText(QString::number(hum)); } } void mycommDialog::recieveDataFromHost( unsigned char * buff, int len) { } void mycommDialog::CleanUI() { time_Datafresh->stop(); ui->lineEditTemp->clear(); ui->lineEditHum->clear(); } void mycommDialog::on_pushButtonOpencom_clicked() { emit nowStartSerialPort(true); commThread.start(); sockThread.start(); emit nowStartCommHost(ui->lineEditServIP->text(),ui->lineEditPort->text().toInt()); time_Datafresh->start(1000); ui->pushButtonOpencom->setEnabled(false); ui->pushButtonCloseCom->setEnabled(true); ui->pushButtonLed0->setEnabled(true); ui->pushButtonLed1->setEnabled(true); ui->comboBoxBaudRate->setEnabled(false); ui->comboBoxCheckBits->setEnabled(false); ui->comboBoxDataBits->setEnabled(false); ui->comboBoxPort->setEnabled(false); ui->comboBoxStopBits->setEnabled(false); //struct PortSettings myCommSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500}; /* myComm = new Posix_QextSerialPort("/dev/ttyUSB0",QextSerialBase::Polling); if(myComm->isOpen()) { myComm->close(); } myComm ->open(QIODevice::ReadWrite); myComm->setBaudRate(BAUD115200); myComm->setDataBits(DATA_8); myComm->setStopBits(STOP_1); myComm->setParity(PAR_NONE); myComm->setFlowControl(FLOW_OFF); myComm->setTimeout(50); myComm->flush(); // connect(myComm,SIGNAL(readyRead()),this,SLOT(readCom())); */ //connect(time_ReadSerialPort,SIGNAL(timeout()),this,SLOT(readCom())); //QextSerialBase::Polling //time_ReadSerialPort->start(1500); } void mycommDialog::on_pushButtonCloseCom_clicked() { time_ReadSerialPort->stop(); emit nowStartSerialPort(false); sockThread.terminate(); commThread.terminate(); ui->pushButtonOpencom->setEnabled(true); ui->pushButtonCloseCom->setEnabled(false); ui->pushButtonLed0->setEnabled(false); ui->pushButtonLed1->setEnabled(false); ui->comboBoxBaudRate->setEnabled(true); ui->comboBoxCheckBits->setEnabled(true); ui->comboBoxDataBits->setEnabled(true); ui->comboBoxPort->setEnabled(true); ui->comboBoxStopBits->setEnabled(true); } void mycommDialog::readCom() { /*DataBuf * rxdata = new DataBuf; //定义好的包头标志定义好的包头标志 //注意:原包头为shor int (0x55aa),但存储顺序为小尾顺序,在内存中是0xaa在前,0x55在后 unsigned char startBytes[2] = {0xaa,0x55}; unsigned char buff[40]; int len = sizeof(DataBuf); //if(serialPort->GetBytes(buff,len)) if(serialPort->GetBytesAt(buff,len,startBytes,2))//通过查找包头标志,在数据包的起始位置读取数据 { rxdata = (DataBuf *)buff; int temp = (int) rxdata->data.tValue; int hum = (int)rxdata->data.hValue; ui->lineEditTemp->setText(QString::number(temp)); ui->lineEditHum->setText(QString::number(hum)); } ////////////////////////////////// //DataBuf * rxdata; //int len =myComm-> bytesAvailable(); // if(myComm->bytesAvailable()>=sizeof(DataBuf)) // { // // QByteArray temp = myComm->readAll(); //rxdata = (DataBuf*)temp.data(); // int datalen = myComm->readData((char*)rxdata,sizeof(DataBuf)); // if(datalen == sizeof(rxdata)) // { // int temp = (int) rxdata->data.tValue; // int hum = (int)rxdata->data.hValue; // ui->lineEditTemp->setText(QString::number(temp)); // ui->lineEditHum->setText(QString::number(hum)); // } // } //////////////////////////////////////////// //读取串口缓冲区的所有数据给临时变量temp //QByteArray temp = myComm->readAll(); //将串口的数据显示在窗口的文本浏览器中 //ui->textBrowser->insertPlainText(temp); */ } void mycommDialog::on_pushButtonLed0_clicked() { cmdBuf cmdbuf; memset(cmdbuf.data, 0, sizeof(cmdbuf.data)); cmdbuf.bufHead = 0x55aa; cmdbuf.bufEnd=0xaa55; cmdbuf.cmd = 0x01; cmdbuf.data_len = 1; cmdbuf.data[0] = 5; emit writeToSerialPort((unsigned char*)&cmdbuf, sizeof(cmdBuf)); } void mycommDialog::on_pushButtonLed1_clicked() { cmdBuf cmdbuf; memset(cmdbuf.data, 0, sizeof(cmdbuf.data)); cmdbuf.bufHead = 0x55aa; cmdbuf.bufEnd=0xaa55; cmdbuf.cmd = 0x02; cmdbuf.data_len = 1; cmdbuf.data[0] = 5; emit writeToSerialPort((unsigned char*)&cmdbuf, sizeof(cmdBuf)); } void mycommDialog::on_comboBoxPort_currentIndexChanged(int index) { emit SetPort(index); } void mycommDialog::on_comboBoxBaudRate_currentIndexChanged(int index) { emit SetBaudRate(index); } void mycommDialog::on_comboBoxDataBits_currentIndexChanged(int index) { emit SetDataBits(index); } void mycommDialog::on_comboBoxStopBits_currentIndexChanged(int index) { emit SetStopBits(index); } void mycommDialog::on_comboBoxCheckBits_currentIndexChanged(int index) { emit SetCheckBits(index); } void mycommDialog::on_lineEditServIP_editingFinished() { unsigned char strIP[20]; //ui->lineEditServIP->setText(QString::number(192.168.1.100)); //emit servIPChanged(strIP,20); }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论