Qt5 编写上位机
代码
(1)mainwindow.h
(2)mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
QSerialPort myserial;
myserial.setPort(info);
if(myserial.open(QIODevice::ReadWrite))
{
ui->portcomboBox->addItem(myserial.portName());
myserial.close();
}
}
ui ->baoudcomboBox->setCurrentIndex(5);
ui->SendDataButton->setEnabled(false);
QObject::connect(ui->ClearButton,SIGNAL(clicked()),this,SLOT(ClearButton_onclick()));
QObject::connect(ui->OpenButton,SIGNAL(clicked()),this,SLOT(OpenButton_onclick()));
QObject::connect(ui->SendDataButton,SIGNAL(clicked()),this,SLOT(SendButton_onclick()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::ClearButton_onclick()
{
ui->textEdit->clear();
}
void MainWindow::SendButton_onclick()
{
serial->write(ui->textEdit_2->toPlainText().toLatin1());
}
void MainWindow::OpenButton_onclick()
{
if(ui->OpenButton->text()==tr("串口"))
{
serial = new QSerialPort;
serial->setPortName(ui->portcomboBox->currentText());
serial->open(QIODevice::ReadWrite);
serial->setBaudRate(ui->baoudcomboBox->currentText().toInt());
switch(ui->datacomboBox->currentIndex())
{
case 8: serial ->setDataBits(QSerialPort::Data8);
break;
default: break;
}
switch(ui->checkcomboBox->currentIndex())
{
case 0: serial->setParity(QSerialPort::NoParity); break;
default: break;
}
switch(ui->stopcomboBox->currentIndex())
{
case 1:serial->setStopBits(QSerialPort::OneStop); break;
case 2:serial->setStopBits(QSerialPort::TwoStop);break;
default : break;
}
serial->setFlowControl(QSerialPort::NoFlowControl);
ui->portcomboBox->setEnabled(false);
ui->baoudcomboBox->setEnabled(false);
ui->datacomboBox->setEnabled(false);
ui->checkcomboBox->setEnabled(false);
ui->stopcomboBox->setEnabled(false);
ui->OpenButton->setEnabled("关闭串口");
ui->SendDataButton->setEnabled(true);
QObject::connect(serial, &QSerialPort::readyRead, this, &MainWindow::Read_Data);
}
else
{
serial ->clear();
serial ->close();
serial ->deleteLater();
ui->portcomboBox->setEnabled(true);
ui->baoudcomboBox->setEnabled(true);
ui->datacomboBox->setEnabled(true);
ui->checkcomboBox->setEnabled(true);
ui->stopcomboBox->setEnabled(true);
ui->OpenButton->setEnabled("关闭串口");
ui->SendDataButton->setEnabled(false);
}
}
void MainWindow::Read_Data()
{
QByteArray buf;
buf = serial->readAll();
if(!buf.isEmpty())
{
QString str = ui->textEdit->toPlainText();
str += tr(buf);
QByteArray str2 = QByteArray::fromHex(str.toLatin1().data());
QString strDis;
QString str3 = str2.toHex().data();
str3 = str3.toUpper();
for(int i = 0; i<str3.length(); i+=2)
{
QString st = str3.mid(i,2);
strDis += st;
strDis +="";
}
ui ->textEdit->append(strDis);
}
buf.clear();
}
(3) mainwindow.ui
(4) 运行结果
在运行过程中报了很多错,但还是一 一解决了,这上位机很简陋,还在努力学习中,,,,