#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QObject::connect(&serial,&QSerialPort::readyRead,this,&MainWindow::serialPort_readyRead);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::btn_checkPort_clicked()
{
std::cout<<"mySlot"<<std::endl;
ui->cbPortName->clear();
//通过QSerialPortInfo查找可用串口
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
ui->cbPortName->addItem(info.portName());
}
ui->cbPortName->addItem("ttyS10");
ui->cbPortName->addItem("ttyS11");
ui->cbBaudRate->addItem(QString("9600"));
ui->cbDataBit->addItem(QString("8"));
ui->cbCrc->addItem(QString("0"));
ui->cbStopBit->addItem(QString("1"));
}
void MainWindow::btn_openPort_clicked()
{
if(ui->btnOpenPort->text()==QString("打开串口"))
{
serial.setPortName(ui->cbPortName->currentText());
serial.setBaudRate(ui->cbBaudRate->currentText().toInt());
switch(ui->cbDataBit->currentIndex())
{
case 8: serial.setDataBits(QSerialPort::Data8); break;
default: break;
}
//设置奇偶校验
switch(ui->cbCrc->currentIndex())
{
case 0: serial.setParity(QSerialPort::NoParity); break;
default: break;
}
//设置停止位
switch(ui->cbStopBit->currentIndex())
{
case 1: serial.setStopBits(QSerialPort::OneStop); break;
case 2: serial.setStopBits(QSerialPort::TwoStop); break;
default: break;
}
//设置流控制
serial.setFlowControl(QSerialPort::NoFlowControl);
//打开串口
if(!serial.open(QIODevice::ReadWrite))
{
QMessageBox::about(NULL, "提示", "无法打开串口!");
return;
}
//下拉菜单控件失能
ui->cbPortName->setEnabled(false);
ui->cbBaudRate->setEnabled(false);
ui->cbDataBit->setEnabled(false);
ui->cbCrc->setEnabled(false);
ui->cbStopBit->setEnabled(false);
ui->btnOpenPort->setText(QString("关闭串口"));
//发送按键使能
ui->btnSendData->setEnabled(true);
}
else
{
//关闭串口
serial.close();
//下拉菜单控件使能
ui->cbPortName->setEnabled(true);
ui->cbBaudRate->setEnabled(true);
ui->cbDataBit->setEnabled(true);
ui->cbCrc->setEnabled(true);
ui->cbStopBit->setEnabled(true);
ui->btnOpenPort->setText(QString("打开串口"));
//发送按键失能
ui->btnSendData->setEnabled(false);
}
}
void MainWindow::btn_sendData_clicked()
{
//获取界面上的数据并转换成utf8格式的字节流
QByteArray data = ui->txtSend->toPlainText().toUtf8();
serial.write(data);
}
void MainWindow::btn_recvClear_clicked()
{
ui->txtRecv->clear();
}
void MainWindow::serialPort_readyRead()
{
//从接收缓冲区中读取数据
QByteArray buffer = serial.readAll();
//从界面中读取以前收到的数据
QString recv = ui->txtRecv->toPlainText();
recv += QString(buffer);
//清空以前的显示
ui->txtRecv->clear();
//重新显示
ui->txtRecv->append(recv);
}
评论1