1.创建工程
选择Qt Widgets Application,输入名称选择路径(不要出现中文),define build system选择默认的qmake
下一步中的bass class选择QWidget,其余配置均按照默认即可,完成项目创建
下面对forms文件夹下面的widget.ui文件进行编辑
- QLineEdit是单行文本输入,一般用于用户名、密码等少量文本交互地方。
- QTextEdit用于多行文本,也可以显示HTML格式文本。QTextEdit多用于显示
- QPlainTextEdit与QTextEdit很像,但它多用于需要与文本进行处理的地方,而QTextEdit多用于显示,可以说,QPlainTextEdit对于plain text处理能力比TextEdit强。(比如文本编辑器就用Qplain Text Edit)
2.实现
2.1.实现ui界面
串口调试助手接受框选择input widgets中的plain text edit即可
选择框选择combo box进行串口号等功能选择
双击可以增加其选项
发送框选择line edit
按钮选择push button
排版如下
并且我们可以通过修改右下角的currentindex来修改默认选项
正如这里的currentindex是2因此波特率就是默认为第三个就是115200
最后对框进行水平排版和垂直排版,最后对整体进行栅格排版即可
2.2.实现逻辑功能
在serial.pro中加入serialport
(1)串口匹配
我们需要自动搜寻串口,这里我们在widget.h文件中定义一个串口
QSerialPort *serialPort;并在其加入头文件#include <QtSerialPort/QSerialPortInfo>
并在widget.cpp文件定义串口
-
foreach(const QSerialPortInfo &info ,QSerialPortInfo ::availablePorts())
: 这是一个 foreach 循环,它遍历了通过QSerialPortInfo::availablePorts()
函数获得的可用串口信息列表。在循环中,每个可用的串口信息都被存储在变量info
中。 -
serialNamePort << info.portName();
: 在循环中,每次迭代会将当前串口的名称(通过info.portName()
获取)添加到一个容器中。 -
ui ->serial_bt->addItems(serialNamePort);
: 最后,将存储了所有串口名称的容器serialNamePort
中的元素添加到 UI 中,估计serial_bt
是一个下拉菜单,addItems
函数会将串口名称添加为下拉菜单的选项。
foreach(const QSerialPortInfo &info ,QSerialPortInfo ::availablePorts())
{
serialNamePort << info.portName();
}
ui ->serial_bt->addItems(serialNamePort);
即可实现串口匹配选择
(2)打开串口初始化实现
当我们点击打开串口时候我们需要对上图参数进行初始化,我们使用打开串口按钮的槽,右键点击打开串口,选择转到槽,选择clicked()
我们先定义了对应的参数用作中间变量,然后对ui->baud_bt->currentText()进行判断,这就是对ui界面上的buad_bt(我给那个框起的名字)哪个框对应的信息进行判断(这是一个字符串),如果相符合就设置为宏,
QSerialPort ::Baud4800就是对应波特率为4800的宏定义,下面对信息进行初始化,最后对串口状态进行判断,使用QMessageBox提醒,其可以实现很多种弹框,下面是一些。
void Widget::on_open_bt_clicked()
{
QSerialPort ::BaudRate baudrate ;
QSerialPort ::StopBits stopbits ;
QSerialPort ::DataBits databits ;
QSerialPort ::Parity checkbits;
//判断波特率
if(ui -> baud_bt ->currentText() == "4800")
baudrate = QSerialPort ::Baud4800;
else if(ui -> baud_bt ->currentText() == "9600")
baudrate = QSerialPort ::Baud9600;
else if(ui -> baud_bt ->currentText() == "115200")
baudrate = QSerialPort ::Baud115200;
else
baudrate =QSerialPort ::Baud115200;
//判断数据位
if(ui ->data_bt ->currentText() == "5")
databits = QSerialPort ::Data5;
else if(ui ->data_bt ->currentText() == "6")
databits = QSerialPort ::Data6;
else if(ui ->data_bt ->currentText() == "7")
databits = QSerialPort ::Data7;
else if(ui ->data_bt ->currentText() == "8")
databits = QSerialPort ::Data8;
else
databits = QSerialPort ::Data8;
//判断停止位
if(ui->stop_bt -> currentText() == "1")
stopbits = QSerialPort::OneStop;
else if(ui->stop_bt -> currentText() == "1.5")
stopbits = QSerialPort::OneAndHalfStop;
else if(ui->stop_bt -> currentText() == "2")
stopbits = QSerialPort::TwoStop;
else
stopbits = QSerialPort::OneStop;
//校验位
checkbits = QSerialPort::NoParity;
//将配置信息同步到配置
serialPort -> setPortName(ui ->serial_bt->currentText());
serialPort -> setBaudRate(baudrate);
serialPort -> setDataBits(databits);
serialPort -> setStopBits(stopbits);
serialPort -> setParity(checkbits);
//检查是否打开
if(serialPort -> open(QIODevice::ReadWrite) == true)
QMessageBox::information(this,"提示","成功");
else
QMessageBox::critical(this,"提示","失败");
}
(3)关闭、发送、清空串口实现
其中写入write是写ui中的send_text框框里面的文字并把其转换为对应数据
//串口open后需要close否则会失败
void Widget::on_close_bt_clicked()
{
serialPort ->close();
}
void Widget::on_send_bt_clicked()
{
serialPort->write(ui->send_text->text().toLocal8Bit().data());
}
void Widget::on_clear_bt_clicked()
{
ui -> send_text ->clear();
}
(4)接收数据实现
这里我们需要实现框框接受数据,这里不想打开、发送等按键,不是说按了之后进入槽函数,而是说我们接收到数据就进入槽函数,因此我们需要进行手动关联信号and槽函数,首先我们需要在头文件中的private slots:中先定义一个槽函数方便后面跳转使用
然后我们在widget.cpp文件中实现槽函数,首先定义了一个qstring类型,然后得到数据,(个人理解这里的serialPort就是实际接入的串口了)然后把接受框放入buf
//发信号者 信号 接收信号者 槽函数
connect(serialPort,SIGNAL(readyRead()),this,SLOT(serialPortreadyread_slot()));
void Widget::serialPortreadyread_slot()
{
QString buf;
//读取串口数据
buf = QString(serialPort ->readAll());
//放置到串口显示界面
ui ->receive_text ->appendPlainText(buf);
}
3.封装为exe可执行文件
在实际工程中我们需要构建win环境下可执行的文件
3.1导出离线文件加入图标
把左下角的debug换为release,再次指向文件,去文件夹即可找到对应的release文件
去该文件夹,再进入release文件夹,可以看到已经生成了一个exe可执行文件
但是缺少了对应的链接库,是打不开的
我们可以找一个自己喜欢的图标将其在网页转换为一个ico类型文件
放入我们的源码文件夹
再去serial.pro文件夹加入
RC_ICONS = favicon.ico
重新编译你会发现exe文件已经变为对应图标
3.2封装exe文件
创建一个文件夹,把exe文件放入其中,打开这个qt的执行文件
首先进入放exe的单独文件夹,cd /d C:\Users\fly613\Desktop\kk win中的命令是cd /d <文件路径>,在使用windeployqt <exe文件名>,即可配置对应的库
完成后即可发现生产了很多dll文件,然后你的exe文件可以执行啦