#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QFileDialog>
#include<QFile>
#include<QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->BaudBox->addItem("9600");
ui->BaudBox->addItem("19200");
ui->BaudBox->addItem("38400");
ui->BaudBox->addItem("57600");
ui->BaudBox->addItem("115200");
ui->BitNumBox->addItem("5");
ui->BitNumBox->addItem("6");
ui->BitNumBox->addItem("7");
ui->BitNumBox->addItem("8");
ui->StopBox->addItem("1");
ui->ParityBox->addItem("0");
ui->openserial->setEnabled(false);
serial = new QSerialPort;
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
QSerialPort serial1;
serial1.setPort(info);
if(serial1.open(QIODevice::ReadWrite))
{
ui->PortBox->addItem(serial1.portName());
serial1.close();
}
ui->BaudBox->setCurrentIndex(0);
ui->BitNumBox->setCurrentIndex(3);
qDebug()<<tr("界面设置成功");
}
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_openserial_clicked()
{
if(ui->openserial->text()==tr("打开串口"))
{
serial->setPortName(ui->PortBox->currentText());
if(!serial->open(QIODevice::ReadWrite))
{
qDebug()<<tr("打开失败");
}
serial->setBaudRate(ui->BaudBox->currentText().toInt());
switch(ui->BitNumBox->currentIndex())
{
case 0:serial->setDataBits(QSerialPort::Data5);break;
case 1:serial->setDataBits(QSerialPort::Data6);break;
case 2:serial->setDataBits(QSerialPort::Data7);break;
case 3:serial->setDataBits(QSerialPort::Data8);break;
default:break;
}
switch(ui->ParityBox->currentIndex())
{
case 0: serial->setParity(QSerialPort::NoParity); break;
default: break;
}
switch(ui->StopBox->currentIndex())
{
case 0: serial->setStopBits(QSerialPort::OneStop); break;
case 1: serial->setStopBits(QSerialPort::TwoStop); break;
default: break;
}
//设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);
ui->PortBox->setEnabled(false);
ui->BaudBox->setEnabled(false);
ui->BitNumBox->setEnabled(false);
ui->ParityBox->setEnabled(false);
ui->StopBox->setEnabled(false);
ui->openserial->setText(tr("关闭串口"));
QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);
}
else
{
serial->clear();
serial->close();
ui->PortBox->setEnabled(true);
ui->BaudBox->setEnabled(true);
ui->BitNumBox->setEnabled(true);
ui->ParityBox->setEnabled(true);
ui->StopBox->setEnabled(true);
ui->openserial->setText(tr("打开串口"));
}
}
void MainWindow::Read_Data()
{
QByteArray buf;
buf = serial->readAll();
if(buf.contains("/"))
{
QString str1 = ui->StextEdit->toPlainText(); //1 1,7,8,9目的是将 QString 转为char*,因为write函数不接受QString作为参数
int a; //2
a=str1.indexOf(";"); //3
QString str2=str1.mid(0,a); //4 2,3,4,5,6是将第一个分号找出来将之前的内容传递给下位,并将剩余部
str1=str1.right(str1.length()-a-1); //5 分截取出来重新赋值给StextEdit部件显示
ui->StextEdit->setText(str1); //6
char* ch; //7
QByteArray ba = str2.toLatin1(); //8
ch=ba.data(); //9
serial->write(ch);
}
if(!buf.isEmpty())
{
QString str = ui->textEdit->toPlainText();
str+=tr(buf);
ui->textEdit->clear();
ui->textEdit->append(str);
}
buf.clear();
}
void MainWindow::on_openfile_clicked()
{
QString filename=QFileDialog::getOpenFileName(this,tr("Open File"),".",tr("Text files (*.txt)"));
if(!filename.isEmpty())
{
QFile file(filename);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QMessageBox::warning(this,tr("Read File"),tr("Can not open file:\n%1").arg(filename));
return;
}
QTextStream in(&file);
ui->StextEdit->setText(in.readAll());
file.close();
ui->openserial->setEnabled(true);
}
else
{
QMessageBox::warning(this,tr("filename"),tr("You did not select any file"));
}
}