QT 串口

一.新建界面
1.新建Qwidge
2.Plain Text Edit接收框,设置readonly
3.Containers(容器)里选择Widget
4.Label->串口选择,拖一个Combo Box
5.Label->波特率,拖一个Combo Box
6.复制波特率的Label与后面的Combo Box(选中按住Ctrl拖动即可复制),分别为停止位,数据位于校验位。
7.添加PushButton改为打开串口
8.CheckBox,16进制显示
9.选中Widget(Lay out in a gird)自动布局。
10.选中Widget,右下角Layout下的layoutColumnStretch的width改为1,0,1保证按键等比例。将Qwidget下的maxmumSize设为180固定横向大小。
11.以上为接收的与配置控件添加完,下面添加一个widget包含发送的一些控件。
12.添加Plain Text Edit发送框。
13.添加Push Button:发送,清除发送,停止发送,发送文件与打开文件。
14.2个Line Edit显示文件名与发送周期
15.添加2个checkbok定制发送与发送新行,然后自动布局。

16.在空白地方点击自动布局会进行整个界面调整,发现上面串口选择位置太宽,添加弹簧Vertical Spacer.并且串口设置的Widget里的元素太紧密,在右下角的Layout里面修改间隔layoutVerticalSpacing里修改(10),是左右上下间距都在这里面调试
17.发现周期的LineEdit的宽度太宽,可以限制他的宽度。可以用截图工具看下需要多宽。然后选中,在右下角的Qwidget里maximumSize的Length修改为45。


二、修改对象的名字

三、编写程序
1.Widget.h中
A.添加头文件
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
2.class Widget中新建一个public初始化函数void Init();然后refactor->Add Definction in Widget.c,将初始化函数添加到Wdiget()析构函数中去
3.在.pro中添加一行
QT       += core gui
QT       += serialport
4.在init()中初始化各种串口配置,可以在help中输入Qserialport查找将波特率,停止位,数据位与校验位设置好。
void Widget::init()
{
    //1.初始化串口
    serialport = new QSerialPort;   //实例化串口对象
    //2. 查找可用的串口
    auto portsInfo = QSerialPortInfo::availablePorts(); //QSerialPortInfo为串口辅助类,显示串口信息
    for(auto & info : portsInfo)    //获取属于容器portsInfo里的变量,并且可以修改
    {
        qInfo()<<info.description() << info.portName() << info.systemLocation();    //可以打印出串口的信息
        ui->protsCmb->addItem(info.portName() +":" + info.description(),info.portName());   //UI上显示串口号。
    }
    //3.获取标准的波特率
    qInfo()<<QSerialPortInfo::standardBaudRates();  //打印波特率
    auto baudRates = QSerialPortInfo::standardBaudRates();
    for(auto br : baudRates)
    {
        ui->baudRateCmb->addItem(QString::number(br),br);
    }
    ui->baudRateCmb->setCurrentText("9600");
    //设置停止位
    ui->stopBitCmb->addItem("1",QSerialPort::OneStop);
    ui->stopBitCmb->addItem("1.5",QSerialPort::OneAndHalfStop);
    ui->stopBitCmb->addItem("2",QSerialPort::OneStop);
    //设置数据位
    ui->dataBitsCmb->addItem("5",QSerialPort::Data5);
    ui->dataBitsCmb->addItem("6",QSerialPort::Data6);
    ui->dataBitsCmb->addItem("7",QSerialPort::Data7);
    ui->dataBitsCmb->addItem("8",QSerialPort::Data8);
    //设置校验位
    ui->parityCmb->addItem("NoParity",QSerialPort::NoParity);
    ui->parityCmb->addItem("EvenParity",QSerialPort::OddParity);
    ui->parityCmb->addItem("OddParity",QSerialPort::SpaceParity);
    ui->parityCmb->addItem("SpaceParity",QSerialPort::MarkParity);
    ui->parityCmb->addItem("MarkParity",QSerialPort::UnknownParity);

    //关联曹,函数4个参数:发射信号的对象,发射的信号,接受信号的对象,要执行的槽;
    connect(serialport,&QSerialPort::readyRead,this,&Widget::onReadyRead);
}

5.开关串口,右击打开串口按钮->Go to slot...(转到槽)->released,在on_openPortBtn_released()中添加打开关闭串口操作。
void Widget::on_openPortBtn_released()
{
    if(serialport->isOpen())
    {
        serialport->close();
        ui->openPortBtn->setText("打开串口");
    }
    else
    { //获取串口名
        auto portName = ui->protsCmb->currentData().toString();
        //获取波特率
        auto baudRate = ui->baudRateCmb->currentData().value<QSerialPort::BaudRate>();  //<>模板?
        //获取数据位
        auto dataBits = ui->dataBitsCmb->currentData().value<QSerialPort::DataBits>();
        //获取停止位
        auto stopBits = ui->stopBitCmb->currentData().value<QSerialPort::StopBits>();
        //获取校验位
        auto parity = ui->parityCmb->currentData().value<QSerialPort::Parity>();
        serialport->setPortName(portName);
        serialport->setBaudRate(baudRate);
        serialport->setDataBits(dataBits);
        serialport->setParity(parity);

        //打开串口
        if(!serialport->open(QIODevice::ReadWrite))
        {   //打开失败
            QMessageBox::warning(this,"warning",portName + "open falied:"+serialport->errorString());
        }
        else
        {   //打开成功
            ui->openPortBtn->setText("关闭串口");
        }
    }
}

6.添加接收函数onReadyRead,并且在初始化函数中添加关联曹函数connect(serialport,&QSerialPort::readyRead,this,&Widget::onReadyRead)


7.发送函数,右击打开发送按钮->Go to slot...(转到槽)->released。


8.发送文件,右击打开文件与发送文件按钮->转到槽->released
#include <QFileDialog>
#include <QStandardPaths>

9.16进制与字符串切换,右击定时发送->Go to slot...(转到槽)->toggled。
10.发送新行(ui->sendNewLineChx->isChecked() ? "\r\n":"")
11.定时发送,右击定时发送->Go to slot...(转到槽)->toggled。

四、一些技巧
1.ctrl+i 对齐选中的代码。
2.#include <QMessageBox> 
3.#include <qDebug>   qInfo()<< 输出日志

串口助手实例:

(1190条消息) QT5实现串口小助手通讯资源-CSDN文库

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值