用Qt写一个上位机(完整版)
用Qt写一个上位机(完整版)
本文将详细介绍如何使用Qt Creator开发一个简单的串口通信上位机程序。该上位机通过串口控制开发板上的LED灯的亮灭状态。文章将从环境搭建、界面设计、功能实现到程序打包,全程手把手教学,适合Qt初学者参考学习。
一、Qt环境搭建
在开始编写上位机之前,我们需要搭建Qt开发环境。这里选择使用Qt Creator进行开发。
1. 注册Qt账号
首先需要注册一个Qt账号,访问Qt官网进行注册。
2. 下载并安装Qt Creator
在Windows上进行开发,下载Windows版本的Qt Creator。下载地址:Qt下载页面
下载得到qt-opensource-windows-x86-5.11.3.exe
后,双击安装。安装过程中需要输入账号密码,并选择需要安装的组件。
3. 验证Qt Creator安装
创建一个简单的C++工程来验证Qt Creator是否安装成功。
编写一个简单的上位机
编写这个简单的上位机我们需要经过以下几个步骤:
- 上位机界面设计
- 上位机逻辑代码编写
- 添加上位机图标
- 上位机程序的打包
- 上位机测试验证
1. 新建一个serial_led工程
创建一个新的Qt Widgets应用程序工程,命名为serial_led
。需要注意的是,工程名及工程路径不要包含中文字符。
2. 上位机界面设计
使用Qt Designer进行界面设计。从左侧的控件区拖动需要的控件到界面编辑区。主要用到的控件包括:
- QComboBox(用于选择串口号和波特率)
- QPushButton(用于打开串口、关闭串口、点灯、灭灯)
- QLabel(用于显示提示信息)
其中,波特率这个下拉框需要双击设置一些备选配置。布局可通过QHBoxLayout、QVBoxLayout等组件调整。最后,需要在右侧的对象管理区为控件重新命名,以便后续代码编写。
3. 上位机逻辑代码编写
(1)添加串口库、包含串口相关头文件
在serial_led.pro
文件添加串口库:
QT += serialport
在widget.h
文件包含串口头文件:
#include <QSerialPort>
#include <QSerialPortInfo>
(2)添加QSerialPort成员
在widget.h
的Widget
类中添加一个QSerialPort
成员:
private:
QSerialPort *serialPort;
(3)创建串口对象、搜索所有可用串口
在Widget
构造函数中创建一个串口对象并搜索所有可用串口:
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
QStringList serialNamePort;
ui->setupUi(this);
this->setWindowTitle("serial_led");
/* 创建一个串口对象 */
serialPort = new QSerialPort(this);
/* 搜索所有可用串口 */
foreach (const QSerialPortInfo &inf0, QSerialPortInfo::availablePorts()) {
serialNamePort<<inf0.portName();
}
ui->serialBox->addItems(serialNamePort);
}
(4)编写“打开串口”槽函数
当点击“打开串口”按钮时,会发出clicked
信号,对应的槽函数on_openButton_clicked
会被调用:
void Widget::on_openButton_clicked()
{
/* 串口设置 */
serialPort->setPortName(ui->serialBox->currentText());
serialPort->setBaudRate(ui->baudrateBox->currentText().toInt());
serialPort->setDataBits(QSerialPort::Data8);
serialPort->setStopBits(QSerialPort::OneStop);
serialPort->setParity(QSerialPort::NoParity);
/* 打开串口提示框 */
if (true == serialPort->open(QIODevice::ReadWrite))
{
QMessageBox::information(this, "提示", "串口打开成功");
}
else
{
QMessageBox::critical(this, "提示", "串口打开失败");
}
}
(5)编写“关闭串口”、“点灯”、“灭灯”槽函数
按照上面打开串口槽函数的方法编写关闭串口、点灯、灭灯槽函数:
void Widget::on_closeButton_clicked()
{
serialPort->close();
}
void Widget::on_onButton_clicked()
{
serialPort->write("ON\n");
qDebug("ON\n");
}
void Widget::on_offButton_clicked()
{
serialPort->write("OFF\n");
qDebug("OFF\n");
}
4. 添加上位机图标
在网上找一个相关的.ico后缀的图标下载放到我们的工程路径下,如:
图标下载网址如:
然后在我们的serial_led.pro
文件中添加如下一行代码:
RC_ICONS = led.ico
5. 上位机程序打包
我们上面运行的上位机都是在Qt Creator中编译运行的,如果我们需要把编写好的可执行文件发送给别人使用的话还需要进行打包。
上面我们的工程是Debug版本的:
打包之前,我们先把工程修改为Release版本:
然后在我们工程目录下得到:
此时,双击release文件夹下的serial_led.exe
文件是会报错的,报错原因是找不到一些相关的动态库:
我们新建一个文件夹保存我们的打包文件,如:
把build-serial_led-Desktop_Qt_5_11_1_MinGW_32bit-Release\release
路径下的serial_led.exe
文件拷贝至serial_led_packet
文件夹中:
打开QT for Disktop工具:
执行如下命令进入打包目录:
cd /d D:\Qt\qt_prj\serial_led\serial_led_packet
然后执行如下命令进行打包:
windeployqt serial_led.exe
此时,serial_led_packet
文件夹中的serial_led.exe
文件就可以双击运行了:
此时就完成了程序的打包。此时我们把这一整个文件夹压缩发送给别人使用了。另外,我们也可以借助一些工具把这些文件打包成一个整体的.exe文件,这里不再介绍。
6. 上位机测试验证
我们点击上位机的点灯、灭灯按钮,则会通过串口分别发送ON\n
、OFF\n
,我们编写下位机代码进行接收,然后操控LED灯即可。