1.UI界面设计
- 这里我用的是mainwindow带ui设计的框架,当然也可以用widget不带菜单栏工具栏的框架。
2.主要程序代码
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
/*------------------user----------------*/
#include <QtSerialPort>
#include <QDebug>
/*--------------------------------------*/
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
//button
void btn_open_port(bool);
void btn_close_port(bool);
void btn_send_data(bool);
//receive data
void recevie_data();
private:
Ui::MainWindow *ui;
/*---------------funtion---------------*/
void system_init();
/*---------------variable--------------*/
QSerialPort global_port;
};
#endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
//自适应高分辨率
#if (QT_VERSION >= QT_VERSION_CHECK(5,9,0))
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//user
system_init();
}
MainWindow::~MainWindow()
{
delete ui;
}
/*-------------funtions------------*/
void MainWindow::system_init()
{
//port config
global_port.setParity(QSerialPort::NoParity);//无奇偶校验
global_port.setDataBits(QSerialPort::Data8);//数据位8
global_port.setStopBits(QSerialPort::OneStop);//停止位1
//connect()
connect(ui->btn_open,&QPushButton::clicked,this,&MainWindow::btn_open_port);
connect(ui->btn_close,&QPushButton::clicked,this,&MainWindow::btn_close_port);
connect(ui->btn_send,&QPushButton::clicked,this,&MainWindow::btn_send_data);
connect(&global_port,&QSerialPort::readyRead,this,&recevie_data);
}
/*-------------signal--------------*/
void MainWindow::btn_open_port(bool)
{
/*------------------port_name-------------------*/
switch(ui->cmb_port_name->currentIndex())
{
case 0:
global_port.setPortName("COM1");
break;
case 1:
global_port.setPortName("COM2");
break;
case 2:
global_port.setPortName("COM3");
break;
case 3:
global_port.setPortName("COM4");
break;
case 4:
global_port.setPortName("COM5");
break;
case 5:
global_port.setPortName("COM6");
break;
case 6:
global_port.setPortName("COM7");
break;
case 7:
global_port.setPortName("COM8");
break;
default:
global_port.setPortName("COM9");
break;
}
/*-------------baud_rate----------------------*/
switch(ui->cmb_baud_rate->currentIndex())
{
case 0:
global_port.setBaudRate(QSerialPort::Baud115200);
break;
case 1:
global_port.setBaudRate(QSerialPort::Baud57600);
break;
case 2:
global_port.setBaudRate(QSerialPort::Baud38400);
break;
case 3:
global_port.setBaudRate(QSerialPort::Baud19200);
break;
case 4:
global_port.setBaudRate(QSerialPort::Baud9600);
break;
case 5:
global_port.setBaudRate(QSerialPort::Baud4800);
break;
case 6:
global_port.setBaudRate(QSerialPort::Baud2400);
break;
default:
global_port.setBaudRate(QSerialPort::Baud1200);
break;
}
//OPEN
global_port.open(QIODevice::ReadWrite);
ui->label_status->setText("串口打开");
}
/*--------------close_serial------------------------*/
void MainWindow::btn_close_port(bool)
{
ui->label_status->setText("串口关闭");
global_port.close();
}
/*---------------send_data---------------------------*/
void MainWindow::btn_send_data(bool)
{
QString data = ui->line_send_data->text();
QByteArray array = data.toLatin1();
global_port.write(array);
}
/*---------------receive_data---------------------------*/
void MainWindow::recevie_data()
{
QByteArray array = global_port.readAll();
if(ui->checkBox->checkState() == Qt::Checked)
{
ui->plainTextEdit->insertPlainText(QString(array.toHex(' ').toUpper().append(' ')));
}
else
{
ui->plainTextEdit->insertPlainText(QString(array));
}
}
3.项目图标添加
- 在网上找到图ico格式的最好48*48,然后在.pro文件添加
RC_ICONS = XW.ico //XW.ico为我文件夹里的文件名
运行结果:
发送:
字符接收:
16进制接收:
评论已关闭