手動開發一個串口調試工具(三):基于 Qt Widgets 搭建串口調試界面

在上一篇中,我們通過 QCoreApplication 構建了一個基礎的串口收發控制臺程序,并實現了周期發送、十六進制轉換和數據讀取等核心功能。本篇將基于此邏輯,進一步將其封裝為一個圖形化界面程序,借助 Qt Widgets 提供的控件搭建完整的串口調試助手界面。


一、界面功能概述

該調試助手界面涵蓋以下幾個關鍵區域:

功能區域描述
串口配置區選擇串口號、波特率、數據位、校驗位、停止位等通信參數
串口控制按鈕區控制串口打開/關閉,清除接收數據
數據接收顯示區實時顯示串口接收內容,支持 ASCII/HEX 格式
數據發送區輸入并發送數據,支持 ASCII 或 HEX 格式
狀態選項與統計區顯示發送/接收選項、時間戳控制、接收字節數/幀數等統計信息

二、控件講解與布局選擇

1?? 串口配置區

使用控件

  • QLabel:顯示“串口號”、“波特率”等提示文字
  • QComboBox:用于列出并選擇參數項(如端口號、波特率等)

設計理由

  • 下拉框可以有效防止用戶輸入錯誤;
  • 通過 QSerialPortInfo::availablePorts() 實時獲取系統串口信息;
  • 使用 addItem(QString, QVariant) 可將顯示值與枚舉值綁定。

📌 參數填充代碼示例:

// 填充串口選項
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {ui->portNameComboBox->addItem(info.portName());
}// 填充波特率
ui->baudRateComboBox->addItem("9600", QSerialPort::Baud9600);
ui->baudRateComboBox->addItem("19200", QSerialPort::Baud19200);
ui->baudRateComboBox->addItem("38400", QSerialPort::Baud38400);
ui->baudRateComboBox->addItem("115200", QSerialPort::Baud115200);
ui->baudRateComboBox->setCurrentIndex(0);// 填充數據位
ui->dataBitsComboBox->addItem("5", QSerialPort::Data5);
ui->dataBitsComboBox->addItem("6", QSerialPort::Data6);
ui->dataBitsComboBox->addItem("7", QSerialPort::Data7);
ui->dataBitsComboBox->addItem("8", QSerialPort::Data8);
ui->dataBitsComboBox->setCurrentIndex(3); // 默認8位數據// 填充停止位
ui->stopBitsComboBox->addItem("1", QSerialPort::OneStop);
ui->stopBitsComboBox->addItem("1.5", QSerialPort::OneAndHalfStop);
ui->stopBitsComboBox->addItem("2", QSerialPort::TwoStop);
ui->stopBitsComboBox->setCurrentIndex(0);// 填充校驗位
ui->parityComboBox->addItem("None", QSerialPort::NoParity);
ui->parityComboBox->addItem("Even", QSerialPort::EvenParity);
ui->parityComboBox->addItem("Odd", QSerialPort::OddParity);
ui->parityComboBox->addItem("Mark", QSerialPort::MarkParity);
ui->parityComboBox->addItem("Space", QSerialPort::SpaceParity);
ui->parityComboBox->setCurrentIndex(0);

2?? 串口控制按鈕區

使用控件

  • QPushButton:用于“打開串口”、“關閉串口”、“清空接收框”

設計理由

  • 明確直觀,結合信號槽機制控制串口對象行為。

📌 綁定示例

connect(ui->openButton, &QPushButton::clicked, this, &MainWindow::openSerialPort);

3?? 數據接收顯示區

使用控件

  • QTextEdit:展示接收數據內容
  • QLabel:文字標識“信息接收”

設計理由

  • 多行顯示、可滾動、支持顏色高亮;
  • 設置只讀,防止誤操作。

📌 示例:

ui->receiveEdit->setReadOnly(true);

4?? 狀態顯示與選項區

使用控件

  • QRadioButton:控制“顯示時間”、“顯示HEX”、“顯示發送”、“顯示接收”
  • QLineEdit(只讀):顯示接收字節、幀數等
  • QGroupBox:對功能分組顯示

設計理由

  • QGroupBox 提升界面組織性;
  • 單選框互斥控制展示選項;
  • 實時更新統計信息,增強可視性。

5?? 數據發送控制區域

使用控件

  • QLineEdit:輸入待發送內容
  • QRadioButton:HEX / ASCII 模式切換
  • QPushButton:發送按鈕

設計理由

  • 簡單交互邏輯清晰;
  • 使用 QSerialPort::write() 發送數據。

📌 示例代碼

QByteArray data = ui->sendLineEdit->text().toUtf8();
serialPort->write(data);

三、界面信號槽連接邏輯

操作控件對應信號槽函數
打開串口openButtonopenSerialPort()
接收數據處理QSerialPortreadyRead()readData()
周期性自動發送QTimertimeout()sendData()
清空接收框clearButtonreceiveEdit->clear()
模式切換(HEX)radioButton修改接收/發送解析方式

四、運行效果展示

運行程序后,用戶可進行如下操作:

? 自動列出所有可用串口
? 設置通信參數后點擊“打開”建立連接
? 接收內容實時顯示,可選 HEX 和時間戳
? 支持 ASCII 或 HEX 方式發送
? 顯示接收/發送字節數與幀數統計


📌 下一篇預告

《手動開發一個串口調試工具(四):功能+界面融合,完整開發串口調試助手》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91087.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91087.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91087.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

量子計算革命:重新定義計算的邊界與未來

引言:我們正站在計算革命的新起點 當IBM在2019年宣布實現"量子霸權"時,很多人認為這只是實驗室里的科學突破。然而,短短幾年后,量子計算已經從理論走向實踐,從實驗室走向產業應用。我們正站在一個全新的計算…

Python 數據可視化之 Matplotlib 庫

在當今數據驅動的時代,數據可視化(Data Visualization)已成為數據科學、機器學習、金融分析、工程建模等多個領域中不可或缺的一環。數據可視化不僅幫助我們更直觀地理解數據的分布和趨勢,還能輔助決策、展示研究成果以及增強數據…

Makefile 快速入門指南

Makefile 快速入門指南 什么是Makefile? Makefile 是一個自動化構建工具的配置文件,用于管理代碼編譯、測試和清理等任務。它通過定義規則(rules)來指定文件之間的依賴關系,當源文件改變時,只重新編譯受影響的部分&…

Linux學習--C語言(指針4、結構體)

1.二維數組的傳參int a[2][3] {1, 2, 3, 4, 5, 6};fun(a,2); int fun(int (*p)[3], int len);2.指針數組的傳參char *pastr[5] {NULL};int fun(char **pstr,int len);例子&#xff1a;#include <stdio.h> #include <string.h>int InputArray(char (*p)[32], int …

【STM32】FreeRTOS 消息隊列(五)

在 FreeRTOS 中&#xff0c;任務消息隊列&#xff08;Message Queue&#xff09; 是一種非常關鍵的通信機制&#xff0c;用于在任務之間 傳遞數據、同步事件。 它是實現任務 解耦、異步通信 的核心工具之一&#xff0c;FreeRTOS 的消息隊列是任務之間通信的橋梁。 簡單點說&am…

【筆記】加速 uv 安裝:系統環境變量配置國內鏡像源

使用 Conda 工具鏈創建 UV 本地虛擬環境全記錄——基于《Python 多版本與開發環境治理架構設計》-CSDN博客 命令行創建 UV 環境及本地化實戰演示—— 基于《Python 多版本與開發環境治理架構設計》的最佳實踐-CSDN博客 加速 uv 包安裝&#xff1a;Windows 系統環境變量配置國內…

Three.js 渲染優化處理

基于項目經驗和最佳實踐&#xff0c;以下是渲染優化的具體處理方法&#xff1a; 1. 幾何體與材質優化 使用 BufferGeometry // 推薦&#xff1a;使用 BufferGeometry 替代 Geometry const geometry new THREE.BufferGeometry();合并幾何體 // 將多個幾何體合并為一個以減少繪制…

Kafka——Kafka控制器

引言在Kafka集群中&#xff0c;有一個組件堪稱"隱形的指揮官"——它默默協調著Broker的加入與退出&#xff0c;管理著主題的創建與刪除&#xff0c;掌控著分區領導者的選舉&#xff0c;它就是控制器&#xff08;Controller&#xff09;。想象一個擁有100臺Broker的大…

編程與數學 03-002 計算機網絡 11_域名系統(DNS)

編程與數學 03-002 計算機網絡 11_域名系統&#xff08;DNS&#xff09;一、DNS的作用與功能&#xff08;一&#xff09;域名與IP地址的映射關系&#xff08;二&#xff09;DNS的層次結構二、DNS查詢過程&#xff08;一&#xff09;遞歸查詢與迭代查詢&#xff08;二&#xff0…

影翎Antigravity將發布全球首款全景無人機,8月開啟公測招募

7月28日&#xff0c;消費級無人機品牌「影翎Antigravity」及品牌標識官宣亮相&#xff0c;計劃推出全新品類——全球首款「全景無人機」。這一消息引發行業震動&#xff0c;消費級航拍無人機市場或將迎來顛覆性飛行體驗。影翎Antigravity官方介紹&#xff0c;引力不僅是束縛雙腳…

SpringBoot集成Quzrtz實現定時任務

一 定時任務介紹 自律是很多人都想擁有的一種能力&#xff0c;或者說素質&#xff0c;但是理想往往很美好&#xff0c;現實卻是無比殘酷的。在現實生活中&#xff0c;我們很難做到自律&#xff0c;或者說做到持續自律。例如&#xff0c;我們經常會做各種學習計劃、儲蓄計劃或減…

Java中的異常判斷以及文件中的常用方法及功能

目錄 異常 作用 異常的處理方式 JVM&#xff08;虛擬機&#xff09;默認的處理方式 自己處理&#xff08;捕獲異常&#xff09; 拋出異常&#xff08;也就是交給調用者處理&#xff09; 自定義異常 file File中常見成員方法 判斷和獲取 創建和刪除 獲取并遍歷 異常…

【C++算法】74.優先級隊列_最后一塊石頭的重量

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 1046. 最后一塊石頭的重量 題目描述&#xff1a; 解法 每次取出最重的兩塊石頭進行碰撞&#xff0c;將剩余的石頭重新放入堆中。 C 算法代碼&#xff1a; class Solution …

中興云電腦W101D2-晶晨S905L3A-2G+8G-安卓9-線刷固件包

中興云電腦W101D2-晶晨S905L3A-2G8G-WIFI-藍牙5.0-3個USB2.0-線刷包線刷方法&#xff1a;1、準備好一根雙公頭USB線刷刷機線&#xff0c;長度30-50CM長度最佳&#xff0c;同時準備一臺電腦&#xff1b;2、電腦上安裝好刷機工具Amlogic USB Burning Tool 軟件 →打開軟件 →文件…

Android OkHttp 底層原理和實戰完全教程(責任鏈模式詳解)

目錄 1. OkHttp 入門:從一個請求開始 1.1 基本 GET 請求:三步走 1.2 同步 vs 異步:選擇你的風格 1.3 為什么選 OkHttp? 2. 配置 OkHttpClient:打造你的專屬網絡引擎 2.1 超時設置:別讓請求卡死 2.2 添加攔截器:窺探請求全過程 2.3 緩存:讓請求更快更省流量 3. …

【RK3588部署yolo】算法篇

簡歷描述收集并制作軍事偽裝目標數據集&#xff0c;包含真實與偽裝各種類型軍事目標共計60余類。其中&#xff0c;包含最新戰場充氣偽裝軍事裝備30余類&#xff0c;并為每一張圖片制作了詳細的標注。針對軍事偽裝目標的特點&#xff0c;在YOLOv8的Backbone與Neck部分分別加…

【Spring Boot 快速入門】一、入門

目錄Spring Boot 簡介Web 入門Spring Boot 快速入門HTTP 協議概述請求協議響應協議解析協議TomcatSpring Boot 簡介 Spring Boot 是由 Pivotal 團隊&#xff08;后被 VMware 收購&#xff09;開發的基于 Spring 框架的開源項目&#xff0c;于 2014 年首次發布。其核心目標是簡…

如何調整服務器的內核參數?-哈爾濱云前沿

調整服務器內核參數是一項較為專業的操作&#xff0c;不同的操作系統調整方式略有不同&#xff0c;以下以常見的 Linux 系統為例&#xff0c;介紹一些調整服務器內核參數的一般步驟和常用參數&#xff1a;一般步驟 備份當前配置&#xff1a;在修改內核參數之前&#xff0c;先備…

C++基礎:模擬實現queue和stack。底層:適配器

引言模擬實現queue和stack&#xff0c;理解適配器&#xff0c;實現起來非常簡單。一、適配器 適配器是一種能讓原本不兼容的接口協同工作的設計模式或者組件。它的主要作用是對一個類的接口進行轉換&#xff0c;使其符合另一個類的期望接口&#xff0c;進而實現適配和復用。&am…

OI 雜題

OI 雜題字符串括號匹配例 1&#xff1a;與之前的類似&#xff0c;就是講一點技巧&#xff0c;但是比較亂&#xff0c;湊合著看吧。 字符串 括號匹配 幾何意義&#xff1a;考慮令 ( 為 111 變換&#xff0c;令 ) 為 ?1-1?1 變換&#xff0c;然后對這個 1/?11/-11/?1 構成…