文档
Qt 毕设入门教程——上位机开发指南
前言
Qt 是毕设上位机开发的首选框架。常见场景:串口调试助手、温湿度监控面板、数据可视化大屏、智能家居控制端。
第一章:Qt 核心概念速通
信号与槽
Qt 最核心的通信机制,替代传统回调函数:
// 按钮点击 → 执行函数
connect(btnSave, &QPushButton::clicked, this, &MyWidget::onSave);
- 信号:事件发生时自动发射(如按钮点击、数据到达)
- 槽:响应信号的普通成员函数
- 连接:
connect(发送者, 信号, 接收者, 槽)
父子对象模型
Qt 自动管理内存:父对象销毁时自动销毁子对象,无需手动 delete。
第二章:实战——串口调试助手
这是毕设中最常见的上位机项目。
关键类
#include <QSerialPort>
#include <QSerialPortInfo>
扫描可用串口
auto ports = QSerialPortInfo::availablePorts();
for (const auto& port : ports) {
qDebug() << port.portName() << port.description();
}
打开串口
QSerialPort serial;
serial.setPortName("COM3"); // Windows
// serial.setPortName("/dev/ttyUSB0"); // Linux
serial.setBaudRate(QSerialPort::Baud115200);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
if (serial.open(QIODevice::ReadWrite)) {
connect(&serial, &QSerialPort::readyRead, [&]() {
QByteArray data = serial.readAll();
qDebug() << "收到:" << data;
});
}
发送数据
serial.write("Hello MCU\r\n");
第三章:数据可视化——QChart
# CMakeLists.txt 需添加
find_package(Qt6 REQUIRED COMPONENTS Charts)
target_link_libraries(... PRIVATE Qt6::Charts)
实时折线图示例
#include <QtCharts>
auto *series = new QLineSeries();
auto *chart = new QChart();
chart->addSeries(series);
chart->createDefaultAxes();
chart->setTitle("温度实时曲线");
auto *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
// 每秒添加一个数据点
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, [series, &sensor]() {
static int t = 0;
series->append(t++, sensor.readTemperature());
});
timer->start(1000);
第四章:打包发布
Windows 打包
# 在 exe 所在目录
windeployqt MyApp.exe
# 自动复制所需 DLL,可直接发给导师
macOS 打包
macdeployqt MyApp.app -dmg
第五章:常见踩坑
| 问题 | 解决 |
|---|---|
| UI 卡顿 | 耗时操作放子线程 QThread 或 QtConcurrent |
| 中文乱码 | 源文件 UTF-8 BOM,或 QStringLiteral() |
| 信号未触发 | 检查是否 connect 成功(返回值) |
| Q_OBJECT 报错 | 确保头文件被 MOC 处理,CMake 开启 CMAKE_AUTOMOC ON |
思考题
- 如何实现串口接收数据后实时更新图表?
QThread和QtConcurrent::run的区别是什么?- 如何用 Qt 实现 Modbus RTU/TCP 通信?