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)  运行结果

在运行过程中报了很多错,但还是一 一解决了,这上位机很简陋,还在努力学习中,,,,

猜你喜欢

转载自blog.csdn.net/naturly/article/details/81706089
Qt5