一前景

很多时候我们在学习一门新的语言,一直在学习各种语法和记住各种关键字,很容易产生枯燥的情绪,感觉学习这些玩意儿不知道用在什么地方,心里很是苦恼,这不,我在这记录下我学习Qt的第一个的小项目-串口通讯助手吧,边做项目边学习比单独看知识点可有趣多啦。话不多说,我们就现在开始吧!

二准备工作

我这边使用的Qt版本为5.12.8,然后打开qt creator。

1,新建项目,选择Qt Widgets Application

2,填写名称和创建路径



3.之后一直默认点下一步。

4.完成后项目是以下这样的,我的项目名称为:MySerialport



这样我们的准备工作就完成了!

三编写代码

1,我们双击打开:MySerialport.pro 文件



在这添加 Qt += serialport,然后点击ctrl+s保存



执行qmake一下,重新构建



2,添加头文件



3.好了,准备工作已经做好了,接下来我们先设计ui界面



接下来出现ui设计界面



设计完成后



现在开始到了关键的时候,我们开始写代码

这是头文件:mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo> QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE class MainWindow : public QMainWindow
{
Q_OBJECT public:
MainWindow(QWidget *parent = nullptr);
~MainWindow(); private:
void _Init(); private:
void _onOpen();
void _onClose();
void _onSendData();
void _onSerialDatas(); private:
Ui::MainWindow *ui;
QSerialPort *_serial; };
#endif // MAINWINDOW_H

这是源文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox> MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, _serial(nullptr)
{
ui->setupUi(this);
_Init();
} MainWindow::~MainWindow()
{
delete ui;
_onClose();
} /*初始化一些必要环境*/
void MainWindow::_Init()
{
connect(ui->toolButton_open, &QToolButton::clicked, this, &MainWindow::_onOpen);
connect(ui->toolButton_close, &QToolButton::clicked, this, &MainWindow::_onClose);
connect(ui->toolButton_send, &QToolButton::clicked, this, &MainWindow::_onSendData);
} /*打开串口*/
void MainWindow::_onOpen()
{
_serial = new QSerialPort(); /*选择信息*/
const QString portname = ui->comboBox_com->currentText();
const QString baudRate = ui->comboBox_baudrate->currentText();
const QString data = ui->comboBox_data->currentText();
const QString stop = ui->comboBox_stop->currentText();
const QString polarity = ui->comboBox_polarity->currentText(); /*设置串口名*/
_serial->setPortName(portname); /*波特率*/
if(baudRate == "9600"){
_serial->setBaudRate(QSerialPort::Baud9600);
}
else if(baudRate == "38400"){
_serial->setBaudRate(QSerialPort::Baud38400);
} /*数据位*/
if(data == "5"){
_serial->setDataBits(QSerialPort::Data5);
}
else if(data == "6"){
_serial->setDataBits(QSerialPort::Data6);
}
else if(data == "7"){
_serial->setDataBits(QSerialPort::Data7);
}
else if(data == "8"){
_serial->setDataBits(QSerialPort::Data8);
} /*停止位*/
if(stop == "1"){
_serial->setStopBits(QSerialPort::OneStop);
}
else if(stop == "1.5"){
_serial->setStopBits(QSerialPort::OneAndHalfStop);
}
else if(stop == "2"){
_serial->setStopBits(QSerialPort::OneStop);
} /*校验位*/
if(polarity == "无"){
_serial->setParity(QSerialPort::NoParity);
}
else if(polarity == "奇校验"){
_serial->setParity(QSerialPort::EvenParity);
}
else if(polarity == "偶校验"){
_serial->setParity(QSerialPort::OddParity);
} /*开始打开串口*/
if(!_serial->open(QIODevice::ReadWrite)){
QMessageBox::warning(this, "警告", "串口打开失败!");
return;
} ui->toolButton_open->setEnabled(false);
connect(_serial, &QSerialPort::readyRead, this, &MainWindow::_onSerialDatas);
} /*关闭串口*/
void MainWindow::_onClose()
{
if(_serial != nullptr){
_serial->close();
delete _serial;
_serial = nullptr;
ui->toolButton_open->setEnabled(true);
} } /*发送串口数据*/
void MainWindow::_onSendData()
{
if(_serial != nullptr){
QByteArray datas = ui->lineEdit_send->text().toLocal8Bit();
_serial->write(datas);
_serial->waitForBytesWritten(3000);
}
} /*接收串口数据*/
void MainWindow::_onSerialDatas()
{
QString datas = _serial->readAll();
ui->textEdit_rece->append(datas.toLatin1());
}

编译运行一下,我们的代码串口助手已经编写完成了,接下来就是测试一下我们编写的是否正确!

三测试

运行我们刚刚写好的串口助手,接下来,再打开另外一个已经测试好的串口通信助手,如果它们两个串口通信助手都能发送和接收数据,说明我们编写的串口通信助手是没有问题的。

1.先测试发送功能



由上图看,我们刚编写的串口通信助手发送功能没有问题!

2.再测试接收功能



由上图看,我们刚编写的串口通信助手接收功能没有问题!

四结束

以上就是记录学习Qt过程中,第一次做一个小小项目的体验,虽然看上去没多大功能,但当时还是很有成就感的!

学无止境,好好努力,致自己,致未来!

Qt 新手实战项目之手把手打造一个串口助手的更多相关文章

  1. 【前端新手也能做大项目】:跟我一起,从零打造一个属于自己的在线Visio项目实战【ReactJS + UmiJS + DvaJS】(二)

    本系列教程是教大家如何根据开源js绘图库,打造一个属于自己的在线绘图软件.当然,也可以看着是这个绘图库的开发教程.如果你觉得好,欢迎点个赞,让我们更有动力去做好! 本系列教程重点介绍如何开发自己的绘图 ...

  2. 【前端vue进阶实战】:从零打造一个流程图、拓扑图项目【Nuxt.js + Element + Vuex】 (一)

    本系列教程是用Vue.js + Nuxt.js + Element + Vuex + 开源js绘图库,打造一个属于自己的在线绘图软件,最终效果:topology.le5le.com .如果你觉得好,欢 ...

  3. 手把手带你打造一个 Android 热修复框架(上篇)

    本文来自网易云社区 作者:王晨彦 前言 热修复和插件化是目前 Android 领域很火热的两门技术,也是 Android 开发工程师必备的技能. 目前比较流行的热修复方案有微信的 Tinker,手淘的 ...

  4. 手把手教你Pytest+Allure2.X定制报告详细教程,给自己的项目量身打造一套测试报告-02(非常详细,非常实用)

    简介 前边一篇文章是分享如何搭建pytest+Allure的环境,从而生成一份精美的.让人耳目一新的测试报告,但是有的小伙伴或者童鞋们可能会问,我能不能按照自己的想法为我的项目测试结果量身打造一份属于 ...

  5. Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  6. Python+Flask+Gunicorn 项目实战(一) 从零开始,写一个Markdown解析器 —— 初体验

    (一)前言 在开始学习之前,你需要确保你对Python, JavaScript, HTML, Markdown语法有非常基础的了解.项目的源码你可以在 https://github.com/zhu-y ...

  7. 手把手搭建一个完整的javaweb项目

    手把手搭建一个完整的javaweb项目 本案例使用Servlet+jsp制作,用MyEclipse和Mysql数据库进行搭建,详细介绍了搭建过程及知识点. 下载地址:http://download.c ...

  8. 打造一个高逼格的android开源项目——小白全攻略 (转)

    转自:打造一个高逼格的android开源项目 小引子 在平时的开发过程中,我们经常会查阅很多的资料,最常参考的是 github 的开源项目.通常在项目的主页面能看到项目的简介和基本使用,并且时不时能看 ...

  9. 如何打造一个"逼格"的web前端项目

    最近利用空余的时间(坐公交车看教程视频),重新了解了前后端分离,前端工程化等概念学习,思考如何打造一个“逼格”的web前端项目. 前端准备篇 前端代码规范:制定前端开发代码规范文档. PS:重中之中, ...

随机推荐

  1. 008.Ansible文件管理模块

    一  stat模块 检查文件状态使用,模块获取文件的状态等信息,类似与linux中的STAT命令可以用来获取文件的属主.可读/写.文件状态等信息 [root@node1 ansible]#  stat ...

  2. Linux_配置主DNS服务(基础)

    [RHEL8]-DNSserver:[Centos7.4]-DNSclient !!!测试环境我们首关闭防火墙和selinux(DNSserver和DNSclient都需要) [root@localh ...

  3. 063.Python前端Django分页器

    Django的分页器 1 前期准备 创建一个数据库,用于存放数据 mysql> create database pager default charset=utf8; mysql> use ...

  4. Linux 文件隐藏属性-创建文件默认权限

    Linux特殊权限介绍 # password原本只有root可以访问但是为什么普通用户在修改密码的时候也可以改里面的内容. [root@gong ~]# ll /usr/bin/passwd -rws ...

  5. 11.2 uptime:显示系统的运行时间及负载

    uptime命令可以输出当前系统时间.系统开机到现在的运行时间.目前有多少用户在线和系统平均负载等信息. [root@cs6 ~]# uptime   17:02:25 up 1:48, 3 user ...

  6. tar压缩文件 .tar.gz

    打包并压缩文件 tar -zcf ansible.tar.gz ansible/* z    gzip属性 c    建立压缩文件 f    指定文件名 v    显示过程 解压文件 tar xzf ...

  7. 树莓派 PICO基础教程(基于MicroPython)

    目录 1 树莓派 PICO 简介 1.1 简介 1.2 配置 [^2] 1.3 引脚图 1.4 尺寸 2 安装 2.1 烧录固件 2.2 安装IDE(Thonny IDE) 2.3 离线运行程序 3 ...

  8. 3 Python相对路径地址的的一个问题

    构建程序xiaojie_test.py import os from xxx.yyy import test test() 同目录下构建一个目录xxx,并且目录中有/tmp/results/graph ...

  9. 多级中间表示概述MLIR

    多级中间表示概述MLIR MLIR项目是一种构建可重用和可扩展的编译器基础结构的新颖方法.MLIR旨在解决软件碎片,改善异构硬件的编译,显着降低构建特定于域的编译器的成本以及帮助将现有编译器连接在一起 ...

  10. 算法训练 区间k大数查询(题解)

    资源限制 时间限制:1.0s   内存限制:256.0MB   问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个.   输入格式 第一行包含一个数n,表示序列长度. 第二行包 ...