一、项目需求
用qt开发一个串口小助手,要求能实现串口接收,发送等基本功能。
二、ui界面设计
三、源码实现
3.1 mainwindow.h
#ifndef mainwindow_h#define mainwindow_h#include #include #include qt_begin_namespacenamespace ui { class mainwindow; }qt_end_namespaceclass mainwindow : public qmainwindow{ q_objectpublic: 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_h3.2 mainwindow.cpp
#include mainwindow.h#include ui_mainwindow.hmainwindow::mainwindow(qwidget *parent) : qmainwindow(parent) , ui(new ui::mainwindow){ ui->setupui(this); //自动识别并显示当前存在的串口号 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 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:按钮控制函数,控制串口的开和关*@param:none*@retval:none*/void mainwindow::onclickedbuttun(){ if(ui->serialonclickpushbutton->text() == tr(打开串口)) { m_serial = new qserialport; //设置串口名 m_serial->setportname(ui->serialportnamecombobox->currenttext()); //打开串口 m_serial->open(qiodevice::readwrite); //设置波特率 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(关闭串口)); } else { //关闭串口 m_serial->clear(); m_serial->close(); m_serial->deletelater(); //恢复设置使能 ui->serialportnamecombobox->setenabled(true); ui->serialbaudratecombobox->setenabled(true); ui->serialopenradiobutton->toggle(); ui->serialonclickpushbutton->settext(tr(打开串口)); }}/**@brief:读取数据函数*@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:发送函数*@param:none*@retval:none*/void mainwindow::on_sendbuttun_clicked(){// m_serial->write(ui->serialsendtextedit->toplaintext().tolatin1()); //此写法不支持中文 m_serial->write(ui->serialsendtextedit->toplaintext().tolocal8bit()); //此写法支持中文}/**@brief:清除发送窗口*@param:none*@retval:none*/void mainwindow::clearsendwindow(){ ui->serialsendtextedit->clear();}四、测试运行
略
哈曼开创车载通讯解决方案 领先语音控制时代技术
太阳诱电高可靠性元件:电容器
射频433接收芯片Y62R介绍
尺寸测量光幕是什么,它的应用场景有哪些
基于飞腾平台的智能制造案例集专家评审会成功举办
基于QT的串口小助手开发
新闻:苹果iOS发布新版本 阿里香港上市下周开始路演
文远知行研发的第三代传感器套件加速了无人驾驶研发的进程
三星S8+真机谍照再曝光,正面设计无悬念
韩国首尔法院批准了三星电子公司两名高管的逮捕令
简易警报电路制作教程
基于富硫聚合物的高灵敏红外偏振器
贸泽电子备货Laird Connectivity Sentrius IG60-BL654入门套件
美光扩大在新加坡的研发业务,致力于制造3D NAND闪存
千家机构调研“踏破门槛” 全球安防龙头上市9年市值增9倍
电力资产管理上如何借助RFID技术的威力
热式质量流量计的原理与应用
OPPO 40W无线充电今年商用
绝压水位计的优势在于它的测量精度要高于表压液位传感器
【底盘大PK】自由光/GLK/Q5