一.新建界面
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
#include
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()<
}
//3.获取标准的波特率
qInfo()<
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
//获取数据位
auto dataBits = ui->dataBitsCmb->currentData().value
//获取停止位
auto stopBits = ui->stopBitCmb->currentData().value
//获取校验位
auto parity = ui->parityCmb->currentData().value
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
#include
9.16进制与字符串切换,右击定时发送->Go to slot...(转到槽)->toggled。
10.发送新行(ui->sendNewLineChx->isChecked() ? "\r\n":"")
11.定时发送,右击定时发送->Go to slot...(转到槽)->toggled。
四、一些技巧
1.ctrl+i 对齐选中的代码。
2.#include
3.#include
串口助手实例:
(1190条消息) QT5实现串口小助手通讯资源-CSDN文库