0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于QT的串口小助手開發(fā)

CHANBAEK ? 來源:BingoMCU ? 作者:BingoMCU ? 2023-04-04 15:07 ? 次閱讀

一、項目需求

用QT開發(fā)一個串口小助手,要求能實現(xiàn)串口接收,發(fā)送等基本功能。

二、UI界面設(shè)計

1ed12f0aa46e450796a29525058fca45.jpeg

三、源碼實現(xiàn)

3.1 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include 
#include 
#include 


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE


class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


private slots:
    void onClickedButtun();
    void readData();
    void clearReceiveWindow();
    void on_sendButtun_clicked();
    void clearSendWindow();


private:
    Ui::MainWindow *ui;
    QSerialPort *m_serial = nullptr;


};
#endif // MAINWINDOW_H

3.2 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    //自動識別并顯示當(dāng)前存在的串口號
    const auto infos = QSerialPortInfo::availablePorts();
    for(const QSerialPortInfo &info:infos)
        ui->serialPortNamecomboBox->addItem(info.portName());


    //添加波特率下拉菜單
    const QString serialBaudrate[9]={"2400","4800","9600","14400","19200","38400","56000","57600","115200"};
    for(int i = 0 ; i < 9 ; i++)
    {
        ui->serialBaudratecomboBox->addItem(serialBaudrate[i]);
    }




    connect(ui->serialOnClickpushButton,&QPushButton::clicked,this,&MainWindow::onClickedButtun);
    connect(ui->serialCleanReceivepushButton,&QPushButton::clicked,this,&MainWindow::clearReceiveWindow);
    connect(ui->serialSendpushButton,&QPushButton::clicked,this,&MainWindow::on_sendButtun_clicked);
    connect(ui->serialCleanSendpushButton,&QPushButton::clicked,this,&MainWindow::clearSendWindow);
}


MainWindow::~MainWindow()
{
    delete ui;
}


/*
*@brief:按鈕控制函數(shù),控制串口的開和關(guān)
*@param:None
*@retval:None
*/
void MainWindow::onClickedButtun()
{
    if(ui->serialOnClickpushButton->text() == tr("打開串口"))
    {
        m_serial = new QSerialPort;


        //設(shè)置串口名
        m_serial->setPortName(ui->serialPortNamecomboBox->currentText());


        //打開串口
        m_serial->open(QIODevice::ReadWrite);


        //設(shè)置波特率
        m_serial->setBaudRate(ui->serialBaudratecomboBox->currentIndex());


        //連接信號
        connect(m_serial,&QSerialPort::readyRead,this,&MainWindow::readData);


        ui->serialPortNamecomboBox->setEnabled(false);
        ui->serialBaudratecomboBox->setEnabled(false);
        ui->serialOpenradioButton->toggle();


        ui->serialOnClickpushButton->setText(tr("關(guān)閉串口"));
    }
    else
    {
        //關(guān)閉串口
        m_serial->clear();
        m_serial->close();
        m_serial->deleteLater();


        //恢復(fù)設(shè)置使能
        ui->serialPortNamecomboBox->setEnabled(true);
        ui->serialBaudratecomboBox->setEnabled(true);
        ui->serialOpenradioButton->toggle();
        ui->serialOnClickpushButton->setText(tr("打開串口"));
    }
}


/*
*@brief:讀取數(shù)據(jù)函數(shù)
*@param:None
*@retval:None
*/
void MainWindow::readData()
{
    QByteArray data = m_serial->readAll();


    if(!data.isLower())
    {
        QString str = ui->serialReceivetextEdit->toPlainText();


//        str += tr(data);      //此寫法不支持中文
        str += QString::fromLocal8Bit(data);        //此寫法支持中文
        ui->serialReceivetextEdit->clear();
        ui->serialReceivetextEdit->append(str);
    }
}


/*
*@brief:清除接收窗口
*@param:None
*@retval:None
*/
void MainWindow::clearReceiveWindow()
{
    ui->serialReceivetextEdit->clear();
}


/*
*@brief:發(fā)送函數(shù)
*@param:None
*@retval:None
*/
void MainWindow::on_sendButtun_clicked()
{
//    m_serial->write(ui->serialSendtextEdit->toPlainText().toLatin1());      //此寫法不支持中文


    m_serial->write(ui->serialSendtextEdit->toPlainText().toLocal8Bit());   //此寫法支持中文
}


/*
*@brief:清除發(fā)送窗口
*@param:None
*@retval:None
*/
void MainWindow::clearSendWindow()
{
    ui->serialSendtextEdit->clear();
}

四、測試運(yùn)行

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1535

    瀏覽量

    75885
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    629

    瀏覽量

    29074
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    1

    文章

    300

    瀏覽量

    37731
  • 界面設(shè)計
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    10463
收藏 人收藏

    評論

    相關(guān)推薦

    QT串口通信的簡單使用

    QT串口通信是上位機(jī)和下位機(jī)通信常用的通信方式, 也是學(xué)習(xí)QT必須學(xué)會的基礎(chǔ)知識, 這篇就簡單介紹一下QT串口通信的簡單使用.
    的頭像 發(fā)表于 01-15 09:27 ?1651次閱讀
    <b class='flag-5'>QT</b><b class='flag-5'>串口</b>通信的簡單使用

    利用QT來制作一個最基本的串口助手

    QT制作串口助手為什么要寫串口助手在學(xué)習(xí)單片機(jī)的過程中,經(jīng)常需要使用串口來和電腦進(jìn)行通信,有時還
    發(fā)表于 01-18 08:09

    【米爾MYD-YT507開發(fā)板試用體驗】ubuntu下QT串口助手開發(fā)調(diào)試

    我們還是先體驗下QT開發(fā)串口調(diào)試助手,這樣我們能用串口接一些傳感器了。首先使用QT5的
    發(fā)表于 08-03 11:05

    Qt串口通信專題教程

    這是一個關(guān)于在Qt Creator下進(jìn)行串口通信軟件開發(fā)的專題教程,能夠幫助你快速的開發(fā)有關(guān)的串口應(yīng)用。
    發(fā)表于 05-04 14:37 ?24次下載

    串口調(diào)試助手怎么用_串口調(diào)試助手使用方法

    串口是嵌入式開發(fā)和單片機(jī)開發(fā)中不可缺少的外設(shè)設(shè)備,通用也要運(yùn)用于整個平臺。所以如何利用串口調(diào)試助手是十分重要的,接下來為大家介紹下如何使用
    發(fā)表于 11-28 16:22 ?7.2w次閱讀
    <b class='flag-5'>串口</b>調(diào)試<b class='flag-5'>助手</b>怎么用_<b class='flag-5'>串口</b>調(diào)試<b class='flag-5'>助手</b>使用方法

    開源的Qt串口助手的使用方法

    串口調(diào)試助手是一款用于串口調(diào)試的工具,目前網(wǎng)上存在很多個版本,功能都差不多,但穩(wěn)定性有好有壞,如果只用于一般的串口調(diào)試,這些工具夠用了,如果想開發(fā)
    的頭像 發(fā)表于 02-02 10:37 ?4773次閱讀
    開源的<b class='flag-5'>Qt</b><b class='flag-5'>串口</b><b class='flag-5'>助手</b>的使用方法

    QT從零開始作單片機(jī)上位機(jī)-串口調(diào)試助手+波形顯示-設(shè)計QT串口助手界面,添加主窗口控件

    第二章 QT從零開始作單片機(jī)上位機(jī)-串口調(diào)試助手+波形顯示目錄第二章 QT從零開始作單片機(jī)上位機(jī)-串口調(diào)試
    發(fā)表于 01-12 19:10 ?15次下載
    <b class='flag-5'>QT</b>從零開始作單片機(jī)上位機(jī)-<b class='flag-5'>串口</b>調(diào)試<b class='flag-5'>助手</b>+波形顯示-設(shè)計<b class='flag-5'>QT</b><b class='flag-5'>串口</b><b class='flag-5'>助手</b>界面,添加主窗口控件

    基于QT的安卓手機(jī)藍(lán)牙APP開發(fā)

    前段時間用QT寫了一個串口調(diào)試助手,感覺還可以。因為QT是跨平臺的,同樣一套代碼可以在windows上面跑,也可以在linux上面跑,也可以在...
    發(fā)表于 01-25 18:43 ?14次下載
    基于<b class='flag-5'>QT</b>的安卓手機(jī)藍(lán)牙APP<b class='flag-5'>開發(fā)</b>

    Qt小項目之串口助手控制LED

    最近剛學(xué)了一點Qt開發(fā)上位機(jī),嘗試著做個小軟件練練手。查找了很多資料,做了一個簡單的串口助手,可以實現(xiàn)串口基本發(fā)送和接收功能,支...
    發(fā)表于 01-26 18:21 ?2次下載
    <b class='flag-5'>Qt</b>小項目之<b class='flag-5'>串口</b><b class='flag-5'>助手</b>控制LED

    QT 串口示波器的串口調(diào)試助手功能

    串口調(diào)試助手功能: 支持傳統(tǒng)的串口調(diào)試助手的基本收發(fā)功能,同時可以刷新大量的數(shù)據(jù)而不卡頓 支持保存接收的數(shù)據(jù) 支持最大200條可編輯指令的設(shè)置,并用于多條發(fā)送
    發(fā)表于 07-07 15:26 ?2646次閱讀

    QT設(shè)計的網(wǎng)絡(luò)助手源碼

    QT設(shè)計的網(wǎng)絡(luò)助手源碼
    發(fā)表于 09-27 11:46 ?2次下載

    【飛凌OKA40i-C開發(fā)板試用體驗】QT實現(xiàn)串口助手

    本文來源電子發(fā)燒友社區(qū),作者:劉建華, 帖子地址: https://bbs.elecfans.com/jishu_2308758_1_1.html 【目的】用QT實現(xiàn)一個串口助手。 因為我的項目
    的頭像 發(fā)表于 10-19 11:21 ?981次閱讀
    【飛凌OKA40i-C<b class='flag-5'>開發(fā)</b>板試用體驗】<b class='flag-5'>QT</b>實現(xiàn)<b class='flag-5'>串口</b><b class='flag-5'>助手</b>

    【米爾MYD-YT507開發(fā)板試用體驗】ubuntu下QT串口助手開發(fā)調(diào)試

    ,因為這些都是QT自己本身就帶的功能,如果有3D應(yīng)該還可以跑下QT 3D效果,本開發(fā)板的全志芯片也是帶了GPU的,顯示3D難度應(yīng)該會好很多。本次的話我們還是先體驗下QT
    的頭像 發(fā)表于 10-26 15:04 ?1230次閱讀
    【米爾MYD-YT507<b class='flag-5'>開發(fā)</b>板試用體驗】ubuntu下<b class='flag-5'>QT</b><b class='flag-5'>串口</b><b class='flag-5'>助手</b><b class='flag-5'>開發(fā)</b>調(diào)試

    Qt5實現(xiàn)上位機(jī)與串口通信

    Qt助手內(nèi)搜索:Qt Serial Port為串口的相關(guān)函數(shù)? 1.添加串口頭文件: # include //使用
    發(fā)表于 05-10 10:46 ?0次下載
    <b class='flag-5'>Qt</b>5實現(xiàn)上位機(jī)與<b class='flag-5'>串口</b>通信

    QT上位機(jī)開發(fā)串口助手(下)

    接著嵌入式QT上位機(jī)開發(fā)串口助手(上)來完善一下串口助手的功能,上一篇博客已經(jīng)實現(xiàn)了自動獲取的
    發(fā)表于 05-29 16:49 ?2次下載
    <b class='flag-5'>QT</b>上位機(jī)<b class='flag-5'>開發(fā)</b>之<b class='flag-5'>串口</b><b class='flag-5'>助手</b>(下)