Qt之上位机开发实战(一)

article/2025/9/26 15:45:17

一、Qt三大金刚

1、qt下的串口编程

2、qt下的网络编程

3、qt下的GPIO

本章节先介绍一下qt下的串口编程,首先我们新建一个Widget项目
我们按照我们的需求给串口助手布局如图所示
其中接受框使用Plain Text Edit(设置只读),串口号等按钮使用Combo Box,发送框使用Line Edit,其余按钮为Push Button,选项值设置双击Combo Box即可。

Qt串口这里我们用到一个很关键的类serialport,在Pro文件下我们需要添加它QT += core gui serialport不然无法使用,接下来我们需要添加串口号使用的代码。打开widget.cpp文件在ui类中添加

QStringList serialNamePort;serialPort = new QSerialPort(this);foreach (const QSerialPortInfo &info ,QSerialPortInfo::availablePorts()) {serialNamePort<<info.portName();
}ui->serialCB->addItems(serialNamePort);

注意添加头文件#include <QSerialPortInfo>,到这里我们的串口助手已经可以识别串口号了。

逻辑功能实现
首先在widget.h文件中添加头文件#include <QSerialPort>,然后在Public中定义QSerialPort *serialPort;紧接着打开widget.cpp文件定义serialport的对象serialPort = new QSerialPort(this);
打开,关闭等按钮和波特率,数据位,停止位,校验位等按钮我们选用自动关联(也可以connect手动关联)槽函数:

void Widget::on_OPEN_clicked()
{QSerialPort::BaudRate baudRate;QSerialPort::DataBits dateBits;QSerialPort::StopBits stopBits;QSerialPort::Parity parity;if(ui->BTrateBOX->currentText() == "4800"){baudRate = QSerialPort::Baud4800;}else if(ui->BTrateBOX->currentText() == "9600"){baudRate = QSerialPort::Baud9600;}else if(ui->BTrateBOX->currentText() == "115200"){baudRate = QSerialPort::Baud115200;}if(ui->DATABOX->currentText() == "5"){dateBits = QSerialPort::Data5;}else if(ui->DATABOX->currentText() == "6"){dateBits = QSerialPort::Data6;}else if(ui->DATABOX->currentText() == "7"){dateBits = QSerialPort::Data7;}else if(ui->DATABOX->currentText() =="8"){dateBits = QSerialPort::Data8;}if(ui->STOPBOX->currentText() == "1"){stopBits = QSerialPort::OneStop;}else if(ui->STOPBOX->currentText() == "1.5"){stopBits = QSerialPort::OneAndHalfStop;}else if(ui->STOPBOX->currentText() == "2"){stopBits = QSerialPort::TwoStop;}if (ui->EVALBOX->currentText() == "None"){parity = QSerialPort::NoParity;}serialPort->setPortName(ui->serialCB->currentText());serialPort->setBaudRate(baudRate);serialPort->setDataBits(dateBits);serialPort->setParity(parity);serialPort->setStopBits(stopBits);if(serialPort->open(QIODevice::ReadWrite)==true){QMessageBox::information(this,"提示","成功");}else{QMessageBox::critical(this,"提示","失败");}
}void Widget::on_CloseBT_clicked()
{serialPort->close();
}void Widget::on_SendBT_clicked()
{serialPort->write(ui->SendEdit->text().toLocal8Bit().data());
}void Widget::on_Cleanall_clicked()
{ui->ReceiveEditEdit->clear();
}

这里我们用到了警告窗口所以需要添加#include <QMessageBox>头文件

串口收发
串口收发时使用信号槽实现的需要手动关联,首先在widget.h中的槽下声明void serilaPortReadyread_slot();并且在widget下添加connect(serialPort,SIGNAL(),this,SLOT(serilaPortReadyread_slot()));

打包可执行文件
我们下载一个ico格式的图片,不可直接更改图片后缀。然后将图复制到工程文件下,在Pro文件下添加RC_ICONS = favicon.ico你的图片。然后我们将Qt切换到Release模式运行,这样我们就会得到一个.exe可执行文件,然后我们在桌面上新建文件并且将可执行文件复制到刚刚创建的文件下。然后我们打开Qt终端。
在这里插入图片描述
输入cd /d +你的文件地址切换到该文件下,输入windeployqt + 可执行文件完整文件名(文件名+.exe)就可以完成打包了。


http://chatgpt.dhexx.cn/article/BJ8ryiBr.shtml

相关文章

C# | 上位机开发新手指南(二)上位机通信

上位机开发新手指南&#xff08;二&#xff09;上位机通信 文章目录 上位机开发新手指南&#xff08;二&#xff09;上位机通信前言串口通信应用场景与控制器通信与传感器通信与仪器仪表通信与智能家居设备通信 常见协议ModbusCAN&#xff08;Controller Area Network&#xff…

C# 西门子PLC上位机开发环境搭建

一、安装软件 1. TIA_Portal_STEP7 15 博途&#xff0c;西门子的自动化开发软件 2. SIMATIC_S7PLCSIM_V15_1 西门子的仿真软件 3. NetToPLCsim C#程序是不能和仿真通信的&#xff0c;只有利用此软件&#xff0c;C#程序才能连接到仿真 二、配置软件 1. 博途 点击 创建新…

java上位机开发(网络编程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 所谓的网络编程&#xff0c;一般就是指UDP、TCP编程。传统的方法就是用api或者sdk直接编程&#xff0c;这种方法对于简单的协议是可以的。但是对于…

上位机开发(详细设计)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 所谓软件详细设计,它的上面对应的是架构设计,下面对应的是程序开发。架构设计有可能涉及多个软件,比如既可能涉及上位机这端,也可能涉及到mcu这端。详细设计的话,一般要落实到…

android ble 上位机,BLE的Android上位机开发(下)

原标题&#xff1a;BLE的Android上位机开发(下) ELLO! 大家好&#xff01;马上就更新下篇了呢~哈哈&#xff01;(上篇的地址&#xff1a;BLE的Android上位机开发(上))废话不多说了&#xff0c;先上主角吧&#xff01;代码如下&#xff01; [Java] 纯文本查看复制代码 ? 01 02 …

java上位机开发(java基础)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 java基础就是把java环境安装好&#xff0c;把基础程序构建起来。至少说让开发的同学来说有一点信心。从这一点来说&#xff0c;就算编写一个“Hell…

上位机开发的意义

上位机开发的意义 常见的上位机定义为一台可以发出特定操控命令的计算机&#xff0c; 通过操作预先设定好的命令&#xff0c;将命令传递给下位机&#xff0c;通过下位机来控制设备完成各项操作。此定义着重于强调控制指令的发送&#xff0c;实际上除了发送控制命令&#xff0c…

Qt之上位机开发实战(三)

UDP编程 udp相对于tcp来说相对简单&#xff0c;udp不分客户端和服务器&#xff0c;只需要使用一个QUdpSocket类&#xff0c;首先完成布局 Pro文件下加QT core gui network&#xff0c;.h文件下加#include <QUdpSocket> .h文件public下创建对象 QUdpSocket *udpSocket;…

C# | 上位机开发新手指南(三)框架

上位机开发新手指南&#xff08;三&#xff09;框架 文章目录 上位机开发新手指南&#xff08;三&#xff09;框架.NETWinFormsWPFUnity3D CQTMFC 其他语言LabVIEW .NET WinForms 在上位机开发中&#xff0c;Windows Forms是使用最广泛的C#框架之一。Windows Forms是.NET Fra…

哈喽上位机(上位机开发指南)

哈喽&#xff0c;上位机&#xff01; -------上位机开发指南 作者&#xff1a;Robert Zhang本博客以一个程序猿的角度解答了: - 有关上位机开发的疑惑 - 上机软件开发需要学习哪些知识 - 开发一个完整商业软件所需的技术与实现方法 - 怎样美化软件&#xff0c;那些漂亮的软件…

C#上位机开发常遇问题

C#上位机开发常遇问题 C#引用C动态库/静态库静态库动态库 unsafe和fixed关键字的应用unsafefixed Path类的使用写在结尾 最近完成了一个小项目的开发&#xff0c;在开发中遇到了一些问题&#xff0c;我感觉这些问题其他人在开发的时候也会遇到&#xff0c;所以我在这边总结一下…

C# 三菱PLC上位机开发环境搭建

一、安装软件 用到两个三菱的软件&#xff1a; 1. MX Component&#xff08;下载地址 也可以直接在官网上搜索&#xff0c;注意MX后面有空格&#xff09; 用于连接PLC 2. GX Works2&#xff08;下载地址 用GX Works3也行&#xff09; 这个软件主要是电气做PLC编程&#xf…

USB上位机开发

上位机开发采用图形化界面&#xff0c;使用C#语言进行开发。调用C编写的Dll动态库&#xff0c;实现与STM32进行USB通信的目的。 首先&#xff0c;编写Dll动态库。 开发环境采用VS2017&#xff0c;语言C 将lusb0_usb.h和libusb.lib文件拷贝到工程目录下。 libusb-win32-bin-…

Matlab上位机开发

Matlab上位机开发 1 了解上位机1.1 上位机的作用1.2 常用上位机开发方式1.2.1 Windows上位机&#xff08;基于串口通信&#xff09;1.2.2 Android上位机&#xff08;基于网络通信&#xff09; 1.3 教程概况1.3.1 C#上位机开发教程1.3.2 IoT App开发1.3.3 Matlab上位机开发 2 He…

C# | 上位机开发新手指南(一)概述

C#上位机开发新手指南&#xff08;一&#xff09;概述 文章目录 C#上位机开发新手指南&#xff08;一&#xff09;概述前言学习C#编程基础熟悉上位机开发相关知识选择合适的开发环境熟练掌握C#编程技巧掌握常用控件的使用方法学习与硬件通讯的方法最后 前言 C#&#xff0c;是微…

上位机开发流程

提示&#xff1a;本文为学习记录&#xff0c;若有错误&#xff0c;请联系作者&#xff0c;虚心受教。 文章目录 前言一、上位机是什么&#xff1f;二、开发步骤1.了解需求2.分析需求3.设计软件模块4.测试软件5.交付及维护软件 总结&#xff1a; 前言 没有人可以真正理解另一个…

上位机开发(怎么开发上位机)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 要开发上位机,主要还是看具体的用途是什么。比如说,是不是负责烧入固件;是不是调制参数;是不是监控;是不是系统控制、是不是仿真等等。当然,不管是什么样的上位机开发,有一些…

VS上位机开发——串口助手

VS上位机开发——串口助手 目录 VS上位机开发——串口助手一、新建项目二、控件布局三、编写程序1、端口更新函数2、启动窗口加载函数3、"打开串口"按键回调函数4、"清除接收"按键回调函数5、"发送"按键回调函数6、串口接收函数7、定时器中断回调…

C++刷题笔记(4)——leetcode209、904

题目1&#xff1a;209.长度最小的子数组 暴力解法 解题思路&#xff1a; 用两个for循环&#xff0c;外层for循环负责做子序列的起点&#xff0c;内层for循环负责遍历数组&#xff0c;寻找符合条件的子序列 然后外层for循环移动子序列的起点&#xff0c;继续再数组中寻找新的符…

904. 水果成篮(c++)

滑动窗口&#xff1a; class Solution { public:int totalFruit(vector<int>& fruits) {int max_len 0;int left 0;unordered_map<int,int>mp;for(int right 0; right < fruits.size();right){mp[fruits[right]];while(mp.size() > 2){mp[fruits[lef…