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

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

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

Qt實(shí)現(xiàn)串口通信

jf_78858299 ? 來源:jf_78858299 ? 作者:jf_78858299 ? 2023-04-23 17:34 ? 次閱讀

要實(shí)現(xiàn)串口通信,需要知道串口通信需要的信息

主要參數(shù)有:波特率、校驗(yàn)位、數(shù)據(jù)位、停止位、控制流

主要操作有:串口的打開和關(guān)閉、刷新設(shè)備串口、接發(fā)數(shù)據(jù)、開關(guān)顯示燈等。

實(shí)現(xiàn)效果如圖:

圖片

界面設(shè)計(jì)如下:

每個(gè)控件類名如下:

LED燈是QLable控件,設(shè)置它的長寬都是24px,然后鼠標(biāo)右擊,選擇“樣式表”,在樣式表中添加代碼。

圖片

圖片

圖片

附贈(zèng)完整源碼

第一步:在頭文件中引入 QtSerialPort 類的兩個(gè)頭文件(必須引入)

// 引入串口通信的兩個(gè)頭文件(第一步)
#include          // 提供訪問串口的功能
#include      // 提供系統(tǒng)中存在的串口信

第二步:在工程文件中添加以下代碼

# 引入串口工程類型(第二步)
QT       += serialport

第三步:在頭文件中定義全局的串口對(duì)象

QSerialPort     *serial;                            // 定義全局的串口對(duì)象(第三步

第四步:參數(shù)設(shè)置,在頭文件中定義初始化參數(shù)的函數(shù)和參數(shù)變量名,在.cpp文件中實(shí)現(xiàn)函數(shù)

public:
void        SerialPortInit();                      // 串口初始化(參數(shù)配置)

private:
// 參數(shù)配置
    QStringList     baudList;                           //波特率
    QStringList     parityList;                         //校驗(yàn)位
    QStringList     dataBitsList;                       //數(shù)據(jù)位
    QStringList     stopBitsList;                       //停止位
    QStringList     flowControlList;                    //控制流
// 串口初始化(參數(shù)配置)
void MainWindow::SerialPortInit()
{
    serial = new QSerialPort;                       //申請(qǐng)內(nèi)存,并設(shè)置父對(duì)象

    // 獲取計(jì)算機(jī)中有效的端口號(hào),然后將端口號(hào)的名稱給端口選擇控件
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
    {
        serial->setPort(info);                      // 在對(duì)象中設(shè)置串口
        if(serial->open(QIODevice::ReadWrite))      // 以讀寫方式打開串口
        {
            ui->PortBox->addItem(info.portName());  // 添加計(jì)算機(jī)中的端口
            serial->close();                        // 關(guān)閉
        } else
        {
            qDebug() << "串口打開失敗,請(qǐng)重試";
        }
    }

    // 參數(shù)配置
    // 波特率,波特率默認(rèn)選擇57600 ,禁止用戶點(diǎn)擊
    ui->BaudBox->addItem("57600");
    serial->setBaudRate(QSerialPort::Baud57600);
    ui->BaudBox->setDisabled(true);

    // 校驗(yàn),校驗(yàn)?zāi)J(rèn)選擇無
    ui->ParityBox->addItem("無");
    serial->setParity(QSerialPort::NoParity);

    // 數(shù)據(jù)位,數(shù)據(jù)位默認(rèn)選擇8位
    ui->BitBox->addItem("8");
    serial->setDataBits(QSerialPort::Data8);

    // 停止位,停止位默認(rèn)選擇1位
    ui->StopBox->addItem("1");
    serial->setStopBits(QSerialPort::OneStop);

    // 控制流,默認(rèn)選擇無
    ui->ControlBox->addItem("無");
    serial->setFlowControl(QSerialPort::NoFlowControl);

    // 刷新串口
    RefreshSerialPort(0);

    // 信號(hào)
connect(serial,&QSerialPort::readyRead,this,&MainWindow::DataReceived);      // 接收數(shù)據(jù)
connect(ui->SendWordOrder,&QPushButton::clicked,this,&MainWindow::DataSend); // 發(fā)送數(shù)據(jù)
connect(ui->SendButton,&QPushButton::clicked,this,&MainWindow::DataSend);    // 發(fā)送數(shù)據(jù)
connect(ui->SendEditBtn1,&QPushButton::clicked,this,&MainWindow::DataSend);  // 發(fā)送數(shù)據(jù)
connect(ui->SendEditBtn2,&QPushButton::clicked,this,&MainWindow::DataSend);  // 發(fā)送數(shù)據(jù)
connect(ui->SendEditBtn3,&QPushButton::clicked,this,&MainWindow::DataSend);  // 發(fā)送數(shù)據(jù)
}

第五步:刷新串口,及時(shí)更新可用的串口

// 刷新串口
void MainWindow::RefreshSerialPort(int index)
{
    QStringList portNameList;                                        // 存儲(chǔ)所有串口名
    if(index != 0)
    {
        serial->setPortName(ui->PortBox->currentText());             //設(shè)置串口號(hào)
    }
    else
    {
        ui->PortBox->clear();                                        //關(guān)閉串口號(hào)
        ui->PortBox->addItem("刷新");                                //添加刷新
        foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()) //添加新串口
        {
            portNameList.append(info.portName());
        }
        ui->PortBox->addItems(portNameList);
        ui->PortBox->setCurrentIndex(1);                             // 當(dāng)前串口號(hào)為COM1
        serial->setPortName(ui->PortBox->currentText());             //設(shè)置串口號(hào)
   }
}

第六步:發(fā)送數(shù)據(jù)和接收數(shù)據(jù)

// 接收數(shù)據(jù),使用read () / readLine () / readAll ()
void MainWindow::DataReceived()
{
    char BUF[512] = {0};                                       // 存儲(chǔ)轉(zhuǎn)換類型后的數(shù)據(jù)
    QByteArray data = serial->readAll();                      // 讀取數(shù)據(jù)

    if(!data.isEmpty())                                 // 接收到數(shù)據(jù)
    {
        QString str = ui->DataReceived->toPlainText();  // 返回純文本
        str += tr(data);                         // 數(shù)據(jù)是一行一行傳送的,要保存所有數(shù)據(jù)
        ui->DataReceived->clear();                      // 清空之前的數(shù)據(jù)
        ui->DataReceived->append(str);                  // 將數(shù)據(jù)放入控件中
        qDebug() << "str info: " << ui->DataReceived->toPlainText();

         // 清除之前的數(shù)據(jù),防止追加,因?yàn)槊看潍@取的數(shù)據(jù)不一樣
        int index = str.indexOf("\\r\\n");                // 找到,返回索引值,找不到,返回-1
        if(index != -1)
        {
            snprintf(BUF,500,"%s", str.left(index + 2).toUtf8().data()); // QString轉(zhuǎn)為char * 類型
            qDebug() << "BUF info: " << BUF;        // 數(shù)據(jù)類型轉(zhuǎn)換成功
            str.remove(0,index + 2); 

            // 處理獲取到的數(shù)據(jù),將其放入對(duì)應(yīng)的控件中
            // .....

        }
    }
}

// 發(fā)送數(shù)據(jù),write ()
void MainWindow::DataSend()
{
    serial->write(ui->DataSend->toPlainText().toLatin1());      // 串口發(fā)送數(shù)據(jù)
}

第七步:打開串口和關(guān)閉串口,當(dāng)打開串口后,顯示綠燈;關(guān)閉串口后,顯示紅燈

// 串口開關(guān)
void MainWindow::on_OpenSerialButton_clicked()
{
    if(serial->isOpen())                                  // 如果串口打開了,先給他關(guān)閉
    {
        serial->clear();
        serial->close();
        // 關(guān)閉狀態(tài),按鈕顯示“打開串口”
        ui->OpenSerialButton->setText("打開串口");
        // 關(guān)閉狀態(tài),允許用戶操作
        ui->BaudBox->setDisabled(false);
        ui->ParityBox->setDisabled(false);
        ui->BitBox->setDisabled(false);
        ui->StopBox->setDisabled(false);
        ui->ControlBox->setDisabled(false);
        // 禁止操作“發(fā)送字符操作”
        ui->SendWordOrder->setDisabled(true);
        ui->SendButton->setDisabled(true);
        // 關(guān)閉狀態(tài),顏色為綠色
        ui->OpenSerialButton->setStyleSheet("color: green;");
        // 關(guān)閉,顯示燈為紅色
        LED(true);
        // 清空數(shù)據(jù)
        ui->DataReceived->clear();
        ui->DataSend->clear();
    }
    else                                             // 如果串口關(guān)閉了,先給他打開
    {
        //當(dāng)前選擇的串口名字
        serial->setPortName(ui->PortBox->currentText());
        //用ReadWrite 的模式嘗試打開串口,無法收發(fā)數(shù)據(jù)時(shí),發(fā)出警告
        if(!serial->open(QIODevice::ReadWrite))
        {
            QMessageBox::warning(this,tr("提示"),tr("串口打開失敗!"),QMessageBox::Ok);
            return;
         }
        // 打開狀態(tài),按鈕顯示“關(guān)閉串口”
        ui->OpenSerialButton->setText("關(guān)閉串口");
        // 打開狀態(tài),禁止用戶操作
        ui->BaudBox->setDisabled(true);
        ui->ParityBox->setDisabled(true);
        ui->BitBox->setDisabled(true);
        ui->StopBox->setDisabled(true);
        ui->ControlBox->setDisabled(true);
        // 允許操作“發(fā)送字符操作”
        ui->SendWordOrder->setDisabled(false);
        ui->SendButton->setDisabled(false);
        // 打開狀態(tài),顏色為紅色
        ui->OpenSerialButton->setStyleSheet("color: red;");
        // 打開,顯示燈為綠色
        LED(false);
    }
}

// 開關(guān)顯示燈
void  MainWindow::LED(bool changeColor)
{
    if(changeColor == false)
    {
        // 顯示綠色
        ui->LED->setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 229, 0, 255), stop:1 rgba(255, 255, 255, 255));border-radius:12px;");
    }
    else
    {
        // 顯示紅色
        ui->LED->setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(255, 0, 0, 255), stop:1 rgba(255, 255, 255, 255));border-radius:12px;");
    }
}

第八步:相關(guān)槽函數(shù)

// 控件中添加 指令“###”
void MainWindow::on_SendButton_clicked()
{
    on_ClearButton_clicked();
    ui->DataSend->append("###");
}
// 清空控件
void MainWindow::on_ClearButton_clicked()
{
    ui->DataSend->setText("");
}
// 清空接收到的數(shù)據(jù)
void MainWindow::on_ClearShowButton_clicked()
{
    ui->DataReceived->setText("");
}
// 點(diǎn)擊發(fā)送后,獲取串口信息并展示在接受控件中
void MainWindow::on_SendEditBtn1_clicked()
{
    on_ClearButton_clicked();
    QString EditText = ui->Edit1->text();               //獲取發(fā)送框內(nèi)容
    ui->DataSend->setText(EditText);                     //將文本內(nèi)容放在發(fā)送欄中
}

void MainWindow::on_SendEditBtn2_clicked()
{
    on_ClearButton_clicked();
    QString EditText = ui->Edit2->text();               //獲取發(fā)送框內(nèi)容

    // qDebug() << "Edit1 text: " << EditText;

    ui->DataSend->append(EditText);                     //將文本內(nèi)容放在發(fā)送欄中
}

void MainWindow::on_SendEditBtn3_clicked()
{
    on_ClearButton_clicked();
    QString EditText = ui->Edit3->text();               //獲取發(fā)送框內(nèi)容

    // qDebug() << "Edit1 text: " << EditText;

    ui->DataSend->append(EditText);                     //將文本內(nèi)容放在發(fā)送欄中
}



void MainWindow::on_SendWordOrder_clicked()
{
    on_SendButton_clicked();
}

源碼:

工程文件.pro文件源碼:

QT       += core gui
# 引入串口工程類型(第二步)
QT       += serialport

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \\
    main.cpp \\
    mainwindow.cpp

HEADERS += \\
    mainwindow.h

FORMS += \\
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

頭文件源碼:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
// 引入串口通信的兩個(gè)頭文件(第一步)
#include          // 提供訪問串口的功能
#include      // 提供系統(tǒng)中存在的串口信息

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

    // 串口功能
    void        SerialPortInit();                      // 串口初始化(參數(shù)配置)
    void        RefreshSerialPort(int index);          // 刷新串口

public slots:
    // 串口槽函數(shù)
    void        DataReceived();                        // 接收數(shù)據(jù)
private slots:
    // 串口槽函數(shù)
    void        DataSend();                            // 發(fā)送數(shù)據(jù)

    void        on_OpenSerialButton_clicked();         // 串口開關(guān)

    void        on_SendButton_clicked();               // 控件中添加 #

    void        on_ClearButton_clicked();              // 清空控件中的所有 #

    void        on_ClearShowButton_clicked();          // 清空接收到的數(shù)據(jù)

    void        LED(bool changeColor);                 // 開關(guān)顯示燈

    // 點(diǎn)擊發(fā)送,接收數(shù)據(jù)
    void        on_SendEditBtn1_clicked();

    void        on_SendEditBtn2_clicked();

    void        on_SendEditBtn3_clicked();


    void on_SendWordOrder_clicked();

private:
    Ui::MainWindow *ui;

    // 串口變量
    QSerialPort     *serial;                            // 定義全局的串口對(duì)象(第三步)
    // 參數(shù)配置
    QStringList     baudList;                           //波特率
    QStringList     parityList;                         //校驗(yàn)位
    QStringList     dataBitsList;                       //數(shù)據(jù)位
    QStringList     stopBitsList;                       //停止位
    QStringList     flowControlList;                    //控制流
};
#endif // MAINWINDOW_H

.cpp文件源碼:

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

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

    SerialPortInit();
}

// 串口初始化(參數(shù)配置)
void MainWindow::SerialPortInit()
{
    serial = new QSerialPort;                       //申請(qǐng)內(nèi)存,并設(shè)置父對(duì)象

    // 獲取計(jì)算機(jī)中有效的端口號(hào),然后將端口號(hào)的名稱給端口選擇控件
    foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
    {
        serial->setPort(info);                      // 在對(duì)象中設(shè)置串口
        if(serial->open(QIODevice::ReadWrite))      // 以讀寫方式打開串口
        {
            ui->PortBox->addItem(info.portName());  // 添加計(jì)算機(jī)中的端口
            serial->close();                        // 關(guān)閉
        } else
        {
            qDebug() << "串口打開失敗,請(qǐng)重試";
        }
    }

    // 參數(shù)配置
    // 波特率,波特率默認(rèn)選擇57600 ,禁止用戶點(diǎn)擊
    ui->BaudBox->addItem("57600");
    serial->setBaudRate(QSerialPort::Baud57600);
    ui->BaudBox->setDisabled(true);

    // 校驗(yàn),校驗(yàn)?zāi)J(rèn)選擇無
    ui->ParityBox->addItem("無");
    serial->setParity(QSerialPort::NoParity);

    // 數(shù)據(jù)位,數(shù)據(jù)位默認(rèn)選擇8位
    ui->BitBox->addItem("8");
    serial->setDataBits(QSerialPort::Data8);

    // 停止位,停止位默認(rèn)選擇1位
    ui->StopBox->addItem("1");
    serial->setStopBits(QSerialPort::OneStop);

    // 控制流,默認(rèn)選擇無
    ui->ControlBox->addItem("無");
    serial->setFlowControl(QSerialPort::NoFlowControl);

    // 刷新串口
    RefreshSerialPort(0);

    // 信號(hào)
    connect(serial,&QSerialPort::readyRead,this,&MainWindow::DataReceived);         // 接收數(shù)據(jù)
    connect(ui->SendWordOrder,&QPushButton::clicked,this,&MainWindow::DataSend);    // 發(fā)送數(shù)據(jù)
    connect(ui->SendButton,&QPushButton::clicked,this,&MainWindow::DataSend);       // 發(fā)送數(shù)據(jù)
    connect(ui->SendEditBtn1,&QPushButton::clicked,this,&MainWindow::DataSend);    // 發(fā)送數(shù)據(jù)
    connect(ui->SendEditBtn2,&QPushButton::clicked,this,&MainWindow::DataSend);    // 發(fā)送數(shù)據(jù)
    connect(ui->SendEditBtn3,&QPushButton::clicked,this,&MainWindow::DataSend);    // 發(fā)送數(shù)據(jù)

}
// 刷新串口
void MainWindow::RefreshSerialPort(int index)
{
    QStringList portNameList;                                        // 存儲(chǔ)所有串口名
    if(index != 0)
    {
        serial->setPortName(ui->PortBox->currentText());             //設(shè)置串口號(hào)
    }
    else
    {
        ui->PortBox->clear();                                        //關(guān)閉串口號(hào)
        ui->PortBox->addItem("刷新");                                //添加刷新
        foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts()) //添加新串口
        {
            portNameList.append(info.portName());
        }

        ui->PortBox->addItems(portNameList);
        ui->PortBox->setCurrentIndex(1);                             // 當(dāng)前串口號(hào)為COM1
        serial->setPortName(ui->PortBox->currentText());             //設(shè)置串口號(hào)
   }
}

// 接收數(shù)據(jù),使用read () / readLine () / readAll ()
void MainWindow::DataReceived()
{
    char BUF[512] = {0};                                       // 存儲(chǔ)轉(zhuǎn)換類型后的數(shù)據(jù)
    QByteArray data = serial->readAll();                      // 讀取數(shù)據(jù)

    if(!data.isEmpty())                                 // 接收到數(shù)據(jù)
    {
        QString str = ui->DataReceived->toPlainText();  // 返回純文本
        str += tr(data);                                // 數(shù)據(jù)是一行一行傳送的,要保存所有數(shù)據(jù)
        ui->DataReceived->clear();                      // 清空之前的數(shù)據(jù)
        ui->DataReceived->append(str);                  // 將數(shù)據(jù)放入控件中
        qDebug() << "str info: " << ui->DataReceived->toPlainText();

         // 清除之前的數(shù)據(jù),防止追加,因?yàn)槊看潍@取的數(shù)據(jù)不一樣
        int index = str.indexOf("\\r\\n");                // 找到,返回索引值,找不到,返回-1
        if(index != -1)
        {
            snprintf(BUF,500,"%s", str.left(index + 2).toUtf8().data()); // QString轉(zhuǎn)為char * 類型
            qDebug() << "BUF info: " << BUF;
            str.remove(0,index + 2);

            // 處理獲取到的數(shù)據(jù),將其放入對(duì)應(yīng)的控件中
            // ....
        }
    }
}
// 發(fā)送數(shù)據(jù),write ()
void MainWindow::DataSend()
{
    serial->write(ui->DataSend->toPlainText().toLatin1());      // 串口發(fā)送數(shù)據(jù)
}

// 開關(guān)顯示燈
void  MainWindow::LED(bool changeColor)
{
    if(changeColor == false)
    {
        // 顯示綠色
        ui->LED->setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 229, 0, 255), stop:1 rgba(255, 255, 255, 255));border-radius:12px;");
    }
    else
    {
        // 顯示紅色
        ui->LED->setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(255, 0, 0, 255), stop:1 rgba(255, 255, 255, 255));border-radius:12px;");
    }
}

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

// 串口開關(guān)
void MainWindow::on_OpenSerialButton_clicked()
{
    if(serial->isOpen())                                        // 如果串口打開了,先給他關(guān)閉
    {
        serial->clear();
        serial->close();
        // 關(guān)閉狀態(tài),按鈕顯示“打開串口”
        ui->OpenSerialButton->setText("打開串口");
        // 關(guān)閉狀態(tài),允許用戶操作
        ui->BaudBox->setDisabled(false);
        ui->ParityBox->setDisabled(false);
        ui->BitBox->setDisabled(false);
        ui->StopBox->setDisabled(false);
        ui->ControlBox->setDisabled(false);
        // 禁止操作“發(fā)送字符操作”
        ui->SendWordOrder->setDisabled(true);
        ui->SendButton->setDisabled(true);
        // 關(guān)閉狀態(tài),顏色為綠色
        ui->OpenSerialButton->setStyleSheet("color: green;");
        // 關(guān)閉,顯示燈為紅色
        LED(true);
        // 清空數(shù)據(jù)
        ui->DataReceived->clear();
        ui->DataSend->clear();
    }
    else                                                        // 如果串口關(guān)閉了,先給他打開
    {
        //當(dāng)前選擇的串口名字
        serial->setPortName(ui->PortBox->currentText());
        //用ReadWrite 的模式嘗試打開串口,無法收發(fā)數(shù)據(jù)時(shí),發(fā)出警告
        if(!serial->open(QIODevice::ReadWrite))
        {
            QMessageBox::warning(this,tr("提示"),tr("串口打開失敗!"),QMessageBox::Ok);
            return;
         }
        // 打開狀態(tài),按鈕顯示“關(guān)閉串口”
        ui->OpenSerialButton->setText("關(guān)閉串口");
        // 打開狀態(tài),禁止用戶操作
        ui->BaudBox->setDisabled(true);
        ui->ParityBox->setDisabled(true);
        ui->BitBox->setDisabled(true);
        ui->StopBox->setDisabled(true);
        ui->ControlBox->setDisabled(true);
        // 允許操作“發(fā)送字符操作”
        ui->SendWordOrder->setDisabled(false);
        ui->SendButton->setDisabled(false);
        // 打開狀態(tài),顏色為紅色
        ui->OpenSerialButton->setStyleSheet("color: red;");
        // 打開,顯示燈為綠色
        LED(false);
    }
}
// 控件中添加 #
void MainWindow::on_SendButton_clicked()
{
    on_ClearButton_clicked();
    ui->DataSend->append("###");
}
// 清空控件
void MainWindow::on_ClearButton_clicked()
{
    ui->DataSend->setText("");
}
// 清空接收到的數(shù)據(jù)
void MainWindow::on_ClearShowButton_clicked()
{
    ui->DataReceived->setText("");
}
// 點(diǎn)擊發(fā)送后,獲取串口信息并展示在接受控件中
void MainWindow::on_SendEditBtn1_clicked()
{
    on_ClearButton_clicked();
    QString EditText = ui->Edit1->text();               //獲取發(fā)送框內(nèi)容
    ui->DataSend->setText(EditText);                     //將文本內(nèi)容放在發(fā)送欄中
}

void MainWindow::on_SendEditBtn2_clicked()
{
    on_ClearButton_clicked();
    QString EditText = ui->Edit2->text();               //獲取發(fā)送框內(nèi)容

    // qDebug() << "Edit1 text: " << EditText;

    ui->DataSend->append(EditText);                     //將文本內(nèi)容放在發(fā)送欄中
}

void MainWindow::on_SendEditBtn3_clicked()
{
    on_ClearButton_clicked();
    QString EditText = ui->Edit3->text();               //獲取發(fā)送框內(nèi)容

    // qDebug() << "Edit1 text: " << EditText;

    ui->DataSend->append(EditText);                     //將文本內(nèi)容放在發(fā)送欄中
}


void MainWindow::on_SendWordOrder_clicked()
{
    on_SendButton_clicked();
}

運(yùn)行后效果:

圖片

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

    關(guān)注

    21

    文章

    4927

    瀏覽量

    139738
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1540

    瀏覽量

    76060
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1607

    瀏覽量

    55381
  • 波特率
    +關(guān)注

    關(guān)注

    2

    文章

    293

    瀏覽量

    34036
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于QT串口調(diào)試工具設(shè)計(jì)

    串口通信是我們經(jīng)常會(huì)遇到的問題。很多時(shí)候當(dāng)我們?cè)O(shè)計(jì)一個(gè)串口應(yīng)用時(shí),我們希望有一個(gè)簡便的、可視的方式來驗(yàn)證它。這一篇中我們就來基于QT設(shè)計(jì)一個(gè)串口
    的頭像 發(fā)表于 12-13 14:37 ?2188次閱讀
    基于<b class='flag-5'>QT</b>的<b class='flag-5'>串口</b>調(diào)試工具設(shè)計(jì)

    QT串口通信的簡單使用

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

    實(shí)現(xiàn)基于Qt的上位機(jī)與下位機(jī)進(jìn)行串口通信

    :Qt5.96Mingw32-bit keil3項(xiàng)目目標(biāo)1、實(shí)現(xiàn)下位機(jī)基于STC單片機(jī)控制LED燈模塊、獨(dú)立鍵盤模塊.2、實(shí)現(xiàn)基于Qt的上位機(jī)與下位機(jī)進(jìn)行
    發(fā)表于 12-08 07:26

    QT串口通信的相關(guān)資料推薦

    QT通信-串口通信前言一、串口搜索二、打開串口二、發(fā)送或接收數(shù)據(jù)二、程序如下:總結(jié)前言
    發(fā)表于 01-11 07:56

    QT串口程序的編寫

    QT串口程序的編寫前言:如果用qt寫程序作為上位機(jī),然后通過和u***和下位機(jī)通信的時(shí)候,就需要用到qt中的
    發(fā)表于 01-18 06:08

    Qt串口通信專題教程

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

    基于Qt串口通信應(yīng)用研究與實(shí)現(xiàn)嚴(yán)賢

    基于Qt串口通信應(yīng)用研究與實(shí)現(xiàn)_嚴(yán)賢
    發(fā)表于 03-17 08:00 ?3次下載

    基于RS232串口實(shí)現(xiàn)PIC單片機(jī)下位機(jī)與QT上位機(jī)通信

    基于RS232串口實(shí)現(xiàn)PIC單片機(jī)下位機(jī)與QT上位機(jī)通信
    發(fā)表于 11-16 12:21 ?21次下載
    基于RS232<b class='flag-5'>串口實(shí)現(xiàn)</b>PIC單片機(jī)下位機(jī)與<b class='flag-5'>QT</b>上位機(jī)<b class='flag-5'>通信</b>

    QT 串口通信,操作程控電源 Agilent 66312A

    背景:用QT來寫個(gè)串口通信小工具,操作程控電源Agilent 66312A ,能夠設(shè)置電壓,獲取電流步驟:1、Agilent 66312A RS-232配置按圖中步驟,確保程控電壓調(diào)制RS-232
    發(fā)表于 01-12 12:44 ?17次下載
    <b class='flag-5'>QT</b> <b class='flag-5'>串口</b><b class='flag-5'>通信</b>,操作程控電源 Agilent 66312A

    利用QT 串口通信進(jìn)行RS232協(xié)議開發(fā)

    QT串口通信協(xié)議代碼最近在研究用串口通信去發(fā)送協(xié)議指令控制相機(jī)工作,因?yàn)槭堑谝淮谓佑|串口,期間也
    發(fā)表于 01-14 10:05 ?3次下載
    利用<b class='flag-5'>QT</b> <b class='flag-5'>串口</b><b class='flag-5'>通信</b>進(jìn)行RS232協(xié)議開發(fā)

    基于Qt實(shí)現(xiàn)串口示波器

    摘要:逛github時(shí)看到這個(gè)QT串口示波器,完全開源,支持串口、TCP、波形顯示、通信協(xié)議。感覺很不錯(cuò),跟以前分享的那個(gè)vofa+有點(diǎn)像。感興趣的可以下載下來學(xué)習(xí)學(xué)習(xí)。
    的頭像 發(fā)表于 06-12 15:34 ?3620次閱讀

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

    QT開發(fā)一個(gè)串口小助手,要求能實(shí)現(xiàn)串口接收,發(fā)送等基本功能。
    的頭像 發(fā)表于 04-04 15:07 ?2049次閱讀
    基于<b class='flag-5'>QT</b>的<b class='flag-5'>串口</b>小助手開發(fā)

    QT與三菱PLC串口通信

    最近兩天在學(xué)習(xí)QT與三菱PLC串口通信,特此記錄下來。 通信格式 我這里使用RS-232C連接的,根據(jù)FX編程口協(xié)議! 設(shè)置參數(shù),以讀寫的方式打開
    發(fā)表于 04-17 16:08 ?0次下載
    <b class='flag-5'>QT</b>與三菱PLC<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    QTQT上位機(jī)串口編程

    QTQT上位機(jī)串口編程 最近因?yàn)轫?xiàng)目需要,需要用到上位機(jī),通過串口與上位機(jī)進(jìn)行通訊,來上傳和下發(fā)一些數(shù)據(jù)以及控制指令,所以用QT寫了一
    發(fā)表于 05-08 10:02 ?25次下載
    <b class='flag-5'>QT</b>篇<b class='flag-5'>QT</b>上位機(jī)<b class='flag-5'>串口</b>編程

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

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