![](https://img-blog.csdnimg.cn/b569d9cb4256403fb0eb380c89696d1b.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Qt
文章平均质量分 59
Qt分类文章
sensetime阿清
嵌入式AI研发人员,不定期发布学习笔记
展开
-
一文搞懂Qt-MQTT开发
本文内容涉及消息队列、MQTT基础知识,以及工程应用相关的服务器搭建、调试软件使用和代码示例。帮助读者一文搞清楚QT-MQTT开发所需的要点。原创 2022-09-09 16:18:53 · 19905 阅读 · 2 评论 -
Qt软件发布(版本信息,Release版程序,代码打包,制作安装包)
当我们完成了Qt程序的开发,希望交予测试,或是正式发布的时候,需要将我们的程序进行层层封装,最终以一个安装包的形式呈现给用户。专业版的软件发布,以Qt软件为例,需要三个步骤:生成版本信息,生成Release版程序,代码打包和制作安装包。本篇将分别对上述三个步骤展开描述。......原创 2022-08-17 15:17:36 · 5809 阅读 · 0 评论 -
修复Qt程序长时间运行控件停止刷新
问题描述我的Qt程序有一个时间显示的功能,由于需要保持长期运行,这个时间控件就需要长期持续刷新。但是,当程序运行一段时间后,这个控件就似乎累了一样,不再继续刷新了。为了解决这个问题,我尝试过很多方法,包括:每隔一段时间,获取时间settext到控件上通过update(),repaint()等页面刷新方法使用qApp.processEvent()强制执行操作但是,无论怎么努力,都无法解决问题,我开始怀疑这是Qt的底层bug。与我遇到同样问题的人也有很多,下面这些都是例子。Qt长时间运行界面停原创 2022-05-10 15:42:43 · 1915 阅读 · 1 评论 -
Qt自动同步时间
Qt自动同步时间Qt自动同步时间需要使用网络时间协议(Network Time Protoco, NTP)。首先需要include一个NTP的库#include <QUdpSocket>然后在头文件声明signals: void connected(); void readyRead();public slots: void setNtp(); void connectsucess(); void readingDataGrams();原创 2021-02-06 16:00:37 · 2123 阅读 · 6 评论 -
Qt自定义弹出窗口
Qt自定义弹出窗口Qt提供了自带的弹出窗口,通过QMessageBox实现。但是QMessageBox只支持编辑有限的内容。如果你想完全自定义实现弹出窗口,可以通过以下方法实现。首先你要自己编辑绘制一个页面,作为弹出页面,然后将它的头文件链接到当前页面中。例如在点击按钮后,弹出UsrDelAlert页面,就可以将如下代码添加到按钮的槽函数中。UsrDelAlert *udl = new UsrDelAlert();//通过设置窗口置顶和模态窗口,模拟自定义QMessagebox的效果//设置窗口原创 2020-11-16 10:01:48 · 3131 阅读 · 0 评论 -
Qt自定义滑动条
最近要用到滑动条,Qt自带的QSlider虽然能满足需求,但是操作起来有很多不舒服的地方,于是在它的基础上改了改,分享给大家使用。先放效果图:在QSlider的基础上,改变了样式,绘制了刻度,增加了取整功能,只需要微调就能适应各种需求。头文件。需要包含下面的东西#include <QSlider>#include <QtCore>#include <QStylePainter>#include <QStyleOptionSlider>原创 2022-01-14 14:26:48 · 4664 阅读 · 1 评论 -
Qt之QMake编译转换为CMake编译
一、前言QMake和CMake都是用来控制编译过程的构建系统,最终生成可在选择的编译器环境中使用的本机makefile和工作区。简单来说,QMake和CMake就像类似于作曲,makefile类似于乐谱,最终由编译器完成乐章的演奏。那么QMake和CMake有什么区别呢?对于纯Qt项目,QMake更加好用。QMake与QtCreator的相性很好,通过.pro文件指导Qt工程编译,方便又快捷。但是,如果需要对Qt以外的第三方依赖项进行配置检查,比如一个很大的项目,其中除了Qt的部分子工程外,还有其他原创 2021-12-22 10:36:23 · 9497 阅读 · 1 评论 -
Qt给静态屏保加上粒子特效
最近正在开发一个系统,有时我觉得常用的静态屏保页面太单调了,想加入一些动态的要素。然后就发现了Qt有一个粒子特效的系统,但是需要用到Qml,而我的系统是用QWidget开发的,没办法直接用Qml…但是Qt也想到了这一点,官方提供了一个叫做quickwidgets的模块,通过它就可以在QWidgets里嵌入动态的Qml页面。基于此,我们开始逐步改写。一、添加quickwidgets模块QT += quickwidgets二、编写qml页面这里采用的方案是在qml中显示原来的静态图片,原创 2021-12-22 09:31:08 · 630 阅读 · 0 评论 -
在QT中使用日志系统
文章转载自 https://blog.csdn.net/hl1796/article/details/90205218当写好的软件发布出去后,用户遇到死机或一些其他的bug,我们该怎么追踪这些问题呢,这时候日志系统很好的帮助了我们。*我在原作者的基础上增加了日志输出模式的区分,开发阶段需要看到所有日志,而发布版只需要看错误日志就行了,所以在这里加以分别。#define compileMode 1 //控制日志的输出模式: 1.debug; 2.releasevoid outputMessage(Q转载 2021-10-18 15:08:30 · 486 阅读 · 0 评论 -
Qt使用socket单端口监听多台设备策略
Qt使用socket单端口监听多台设备策略项目背景:客户端设备启动后便会一直向指定ip和端口下发送信息,每次发送的时间间隔1秒,发送的内容包括设备的配置内容。服务端要求编写代码,通过socket与多台客户端设备建立长连接,持续地获取客户端发送的消息,分别解析它们然后在前端显示。此外,服务端设备还需要可以选择设备定向发送命令,从而操控该设备。项目环境:Linux系统 + Qt前、后端 + sqlite数据库解决思路:因为需要连接到多台设备,因此需要使用多线程,每个子线程分别处理一台客户端设备发送的内容。原创 2021-07-29 11:15:44 · 1651 阅读 · 0 评论 -
Qt之使用socket实现远程控制
Qt之使用socket实现远程控制在前面的文章中介绍过Qt心跳包的实现方法,本篇文章将会介绍下位机通过心跳包和上位机之间进行数据交互和远程功能控制的实现方法。首先介绍环境,下位机使用Qt作为主程序,上下位机使用TCP socket进行网络通信,上位机实现方式任意。下位机心跳包线程在进程一开始就启动,一直到进程结束才停止。心跳包是一个始终独立的线程,首先要搭建框架:main.cpp#include <heartbeatthread.h> //心跳包线程 heartbea原创 2021-04-30 14:35:45 · 2387 阅读 · 3 评论 -
Qt文本的淡入淡出
Qt文本的淡入淡出对于写在Qlabel中的文本,想对其实现淡入和淡出的特效,需要用到QGraphicsOpacityEffect,并搭配计时器使用。示例如下。.h文件:#include <QGraphicsOpacityEffect>#include <QTImer>QTimer *opacity_timer = nullptr;QGraphicsOpacityEffect *effect = nullptr;QLabel *meet = nullptr;flo原创 2021-04-22 16:52:21 · 805 阅读 · 0 评论 -
Qt之TCP心跳包
Qt之TCP心跳包当Qt作为客户端程序,而服务器需要监控客户端的在线状态时,就需要Qt端发送心跳包。心跳包可以是TCP也可以是UDP,这里介绍TCP心跳包的实现方法。心跳包通常要单开一个线程,在进程运行的过程中一直执行。代码示例:.h文件#ifndef HEARTBEATTHREAD_H#define HEARTBEATTHREAD_H#include <QThread>#include <QCoreApplication>#include <QTimer&原创 2021-04-13 11:47:27 · 4232 阅读 · 4 评论 -
Qt多线程的几种实现方式
Qt多线程的几种实现方式在Qt中经常会遇到耗时操作,需要并发执行,这个时候就要用到多线程。Qt的多线程有多种实现形式,这里介绍3种方式。类实现形式用类实现多线程是最传统的实现形式,思想是写一个继承QThread的类,然后通过run()来开启线程。代码示例:.h文件#include <QThread>class xthread : public QThread{ Q_OBJECTpublic: explicit xthread(QObject *paren原创 2021-04-13 11:29:08 · 5491 阅读 · 0 评论 -
Qt简单的异步操作实现方法
Qt简单的异步操作实现方法在实际应用中,经常会遇到一些耗时操作,导致了主线程的阻塞,这时候可以使用异步操作来避免阻塞。Qt的异步操作需要使用下面的库#include <QtConcurrent/QtConcurrent>然后将耗时操作丢进下面的函数中即可。QtConcurrent::run([=]() { func(); });如果需要判断耗时操作执行完毕与否,可以使用QFuture和QFutureWatcher的结合。QFuture 表示异步计算原创 2021-03-03 08:46:29 · 6129 阅读 · 0 评论 -
Qt解决Linux/ARM下QSound无法播放的问题
Qt解决Linux/ARM下QSound无法播放的问题Qt在Linux/ARM环境下使用QSound播放音频时,有时会遇到音频无法播放的问题。这有可能是音频文件与Qt不兼容的问题。QSound只能播放.wav格式的音频,无法播放诸如.mp3格式的音频。但即使是.wav格式的音频,也存在 NIST/Sphere和Microsoft WAVE类型的区别。注意!Qt只支持Microsoft WAVE的.wav格式音频,不支持NIST/Sphere的。 因此当你怀疑你的.wav音频格式时,建议使用文件转换器将原创 2021-02-20 15:50:10 · 1810 阅读 · 1 评论 -
Qt之WIFI搜索、显示与连接
首先介绍一下我的环境,Linux环境下使用Qt,交叉编译到ARM板上调试,ARM板自带WIFI模块,大部分Linux命令我都可以自由地使用。首先,需要通过控制台命令来获取WIFI信息,按照图片上画的,至少要得到WIFI名称、信号强度和加密方式。获取WIFI的命令有很多,但是简单地调用命令获取WIFI信息文件无法直接使用,还需要提取到其中的字符串信息。假定我们通过一些命令,获取到了这些内容,还要通过代码将它们传递给主程序。做到这一点,前期的准备工作才算做完。原创 2021-01-26 17:31:02 · 8639 阅读 · 2 评论 -
ARM上搜索WIFI并解析字符串
ARM上搜索WIFI并解析字符串背景:项目部署在ARM上,现要实现软件层面的WIFI模块,需要在Qt上通过system指令搜索wifi并解析字符串。方案1:Qt可以使用system命令,使用iwlist指令并配合grep和sed指令将搜索结果过滤为我们想要的格式,即下面这样的格式:wifi名wifi信号强度wifi加密模式...最后Qt通过readLine()的方式逐行读取文件中的内容。代码如下:system("sudo iwlist wlan0 scan >./temp ");原创 2021-01-25 11:51:30 · 1882 阅读 · 8 评论 -
Qt之点击QLineEdit显示软键盘
点击QLineEdit显示软键盘在嵌入式开发时,不能通过鼠标键盘输入是很常见的。这时候就需要通过软件层,实现软键盘和输入法来满足用户需求。一般来说,软键盘的显示通常和QLineEdit的点击事件挂钩。而QLineEdit与QPushButton不同,它并没有clicked的信号,因此需要通过别的方式来监测点击事件。因此,点击QLineEdit显示软键盘可以解耦为两个问题:1)软键盘+输入法; 2)软键盘触发。1)软键盘+输入法一般来说不推荐造轮子,软键盘目前有大量的开源项目,这里推荐这篇博文。(后原创 2021-01-13 15:58:06 · 6388 阅读 · 4 评论 -
Qt使用数组实现控件批处理
Qt使用数组实现控件批处理在Qt中,当你需要对多个控件进行批处理操作时,使用控件数组会大大简化你的代码量。例如希望在一个页面中创建一个控件数组,其中包含8条控件集合。控件数组的定义如下:QCheckBox *checkbox[8];QLabel *name[8];QLabel *ID[8];QPushButton *userDelBtn[8];QPushButton *userEdtBtn[8];然后在你的cpp中使用循环,将它们实例化。for(int i = 0; i < 8;原创 2020-12-28 18:01:36 · 4691 阅读 · 3 评论 -
Qt简单的按钮槽函数传递参数方法
Qt简单的按钮槽函数传递参数方法Qt中一个典型的点击按钮触发槽函数的写法是:connect(btn, &QPushButton::clicked, this, &class::func);当你希望在点击按钮后再向槽函数中传递参数,这种写法就无法做到了。其原因是槽函数要和信号的参数完全对应,如果修改了传给槽函数的参数,点击按钮的信号就无法处理。这里给出一个比较简单的传参方法,在信号槽中使用lambda表达式,如:connect(btn, &QPushButton::clic原创 2020-12-28 17:51:31 · 10258 阅读 · 3 评论 -
Qt启动页多线程
Qt启动页多线程项目需要在Qt进入启动页之前加载一个大模型文件,同时要有一个页面用来提示用户加载状态。这里就需要用到多线程了,如果在单线程操作,要么需要等到文件加载完毕后才能显示等待页,要么干脆跳过了模型文件的加载,都是不符合需求的。我们通过代码分析。首先要绘制加载页,这里做一个非常简单的等待页,只有一行Loading…,可根据需求修改。waiting.h#ifndef WAITING_H#define WAITING_H#include <QDialog>#include原创 2020-12-03 15:11:07 · 382 阅读 · 0 评论 -
Qt使用OpenCV调用摄像头显示到QLabel并裁剪
Qt使用OpenCV调用摄像头并裁剪在Qt中调用摄像头并显示在界面中,有两种方式。第一种方式可以使用Qt自带的QCamera库,并在你的.pro文件中加入如下代码。QT += multimediaQT += multimediawidgets这种方式虽然简单,但在嵌入式开发中配置环境很容易带来麻烦。而且这种方式无法使摄像头采集的图像完美适配各种自定义的分辨率(在网上找了很久也没找到,如果可以请指教)。采用OpenCV则可以较好地实现这一要求,但使用前要先配好OpenCV的原创 2020-11-23 09:03:17 · 1278 阅读 · 0 评论 -
Qt滚动日期选择器
Qt滚动日期选择器最近产品经理提了一个需求,要实现一个滚动日期选择器。这个功能看似简单,实际实现起来不容易,里面有一些细节需要注意。目前网上很难找到类似的控件,只能找到单独的一条控件这意味着又要开始造轮子了 ( ・᷄д・᷅ )我先实现了单条的纵向控件,分别实现年、月、日独自的上下拖拽,最后把它们整合在一起。代码比较繁琐,不够优雅,不过功能还是实现了的 ✌ ・︵・年份滚动条rollingboxy.h//时间滚动条-年份#ifndef ROLLINGBOXY_H#define ROLLIN原创 2020-11-16 13:51:17 · 4988 阅读 · 11 评论 -
Qt使用QSettings保存和读取用户信息
Qt使用QSettings保存和读取用户信息Qt中保存和读取用户信息可以使用数据库,也可以使用QSettings。当需要保存的信息较少,那么使用QSettings写入配置文件就是一种比较简单的方式。以用户注册与登录为例。注册首先绘制注册页,添加两个QLineEdit和一个QPushButton,如下。然后开始编写配置文件。首先你要include QSettings。#include <QSettings>然后,编写按钮的槽函数,将用户输入的内容保存到本地的配置文件中。Q原创 2020-11-16 11:12:53 · 3380 阅读 · 1 评论 -
Qt自定义开关按钮控件
Qt自定义开关按钮控件最近的项目需要在页面中添加一个开关按钮,样式类似于iOS的wifi开关按钮。在网上借鉴了别人的代码,稍作修改可以呈现出想要的效果(๑ `▽´๑)代码如下。switchcontrol.h#include <QWidget>#include <QTimer>class SwitchControl : public QWidget{ Q_OBJECTpublic: explicit SwitchControl(QWidget原创 2020-11-16 10:23:57 · 4543 阅读 · 0 评论 -
在Rockchip RK3399 Pro开发板上跑通第一个Qt程序
在Rockchip RK3399 Pro开发板上跑通第一个Qt程序准备工作:将Qt从Windows移植到Linux一、交叉编译器的准备下载交叉编译工具安装交叉编译工具二、交叉编译Qt库三、在QtCreator上交叉编译安装QtCreator四、在ARM开发板上跑通第一个Qt程序开发板Qt配置执行Qt程序参考资料这是我毕业后做的第一个项目。项目过程中,要求把之前在Windows上编译的Qt程序移植到Rockchip RK3399 Pro开发板上。参考了网上的诸多资料后,现在已经可以在开发板上跑通Qt程序原创 2020-11-16 09:38:21 · 4571 阅读 · 0 评论