Qt
文章平均质量分 55
LearnLHC
这个作者很懒,什么都没留下…
展开
-
QT 源码分析 - exec 函数
目录一、exec() 简介:二、QDialog::exec()三、QCoreApplication::exec()四、QEventLoop 的 exec()一、exec() 简介:1、说明:事件循环,首先是一个无限 “循环”程序在 exec() 里面无限循环,能让跟在 exec() 后面的代码得不到运行机会,直至程序从 exec() 跳出其次,之所以被称为“事件”循环,是因为它能接收事件,并处理之。当事件太多而不能马上处理完的时候,待处理事件被放在一个“队列”里原创 2021-04-11 17:54:57 · 5632 阅读 · 0 评论 -
Qt WebEngine 实战 - 仿制浏览器(加载进度、放大、缩小、前进、后退、网站图标、历史记录、页面查找)
目录一、成果展示二、功能拆解:0、网页加载逻辑1、在标题栏,显示加载进度2、 放大、缩小、重置3、 前进、后退、刷新4、 获取网站图标5、显示历史记录,提供显示与跳转功能6、界面内查找:三、完整工程代码:一、成果展示QT 仿制浏览器,实现功能如下:1、获取网址时,在标题栏,显示加载进度2、查看:界面的 放大、缩小、重置 功能3、界面导航功能:前进、后退、刷新 功能4、获取网站图标5、显示历史记录,并提供跳转功能6、界面内查找:在当前界原创 2021-03-31 10:56:37 · 3179 阅读 · 3 评论 -
QT 线程,实现生产者-消费者模式
一、两种启动线程方式:1、QThread2、QObject::moveToThread() 函数可以让 调用者的 槽中的代码,在单独的线程执行。注:如果该对象有 父对象,那么它无法被移动。二、线程同步①、QMutex:互斥锁②、QReadWriteLock读写锁的功能。读写锁是用来保护可以被读访问和写访问的资源的一种同步工具。如果你想让多个线程同时的对资源进行读访问,但只要有一个线程要对资源进行写访问时,所有其他的线程必须等待,直到...原创 2021-03-30 19:22:33 · 1902 阅读 · 0 评论 -
QT 进程间通信,使用共享内存写入读取数据
目录一、进程间通信的方式:1、TCP/IP2、共享内存3、D-Bus4、QProcess5、管道二、QSharedMemory 的使用一、进程间通信的方式:1、TCP/IP如:QNetworkAccessManager、QTcpSocket、QTcpServer、QSslSocket2、共享内存QSharedMemory 跨平台的共享内存类3、D-BusQt D-Bus 模块是一个 Unix 库,可以使用 D-Bus 协议来实现进程间通信。它将 Q原创 2021-03-30 15:35:44 · 1418 阅读 · 0 评论 -
QProcess 获得 ping 后的结果 || 调用其他 exe 获取其输出信息
目录一、QProcess 简述:二、QProcess 函数与应用1、连接信号槽函数2、启动 Process2'、调用其他 exe2''、其他 exe 的输出写法:3、读取 其他程序的输出结果信息:4、其他槽函数信息:5、结果展示:一、QProcess 简述:QProcess 可以启动其他进程 exe 软件,那么在本进程中,可否获得其他进程 (exe) 的输出信息吗?答案是可以的,如何做呢?我们来看一下:二、QProcess 函数与应用1、连接信号槽函数原创 2021-03-30 15:12:10 · 1440 阅读 · 0 评论 -
QT 录制音频(麦克风、系统)
目录一、成果展示:二、代码三、录制系统声音一、成果展示:二、代码1、main.cpp#include "myaudiorecorder/AudioWidget.h" int main(int argc, char *argv[]){ QApplication a(argc, argv); AudioWidget w; w.show(); return a.exec();}2、AudioWidget.h#ifndef AUDIO原创 2021-03-17 11:05:32 · 3779 阅读 · 4 评论 -
QT 使用摄像头显示画面 并 拍照
一、前置说明限制:QT 相机 QCamera:只提供了有限的相机支持,如 取景器显示 和 拍照功能,大部分相机控制功能没有实现。在 win7 上,无法用 QCamera 实现 视频录制功能使用的类的说明:QCamera 类用于打开系统的摄像头设备,QCameraViewfinder 用于显示捕获的视频,QCameraImageCapture 用于截图。二、成果展示:三、代码1、main.cpp#include "myaudiorecorder/Aud原创 2021-03-17 10:46:22 · 6498 阅读 · 3 评论 -
QT 使用OpenGL 进行 3D 绘图
目录一、成果展示:二、代码展示:1、main.cpp2、MyGLWidget.h3、MyGLWidget.cpp三、编译错误 解析:1、gluPerspective 和 gluLookAt 找不到标识符2、error: LNK2019: 无法解析的外部符号 __imp_glBegin等一、成果展示:二、代码展示:1、main.cpp#include <QtWidgets/QApplication>#include "myglwidget.原创 2021-03-16 16:28:09 · 1886 阅读 · 0 评论 -
QT 自定义拖放操作,拖拽时 显示图片,且给原图片加阴影
1、要点:1、鼠标在移动过程中显示图片2、拖动时鼠标指针在图片的位置不变3、拖拽图片时,给原图片添加阴影2、MainWindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>namespace Ui { class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic:.原创 2021-03-10 16:10:46 · 1044 阅读 · 0 评论 -
QT 容器 QList,QLinkedList,QVector,QMap,QHash优缺点,与使用范围
https://qtdoc.cn/Src/C/Container_Classes/Container_Classes.html一、前言:如果想看 STL容器 的优缺点,请查看如下文章:《C++ STL容器 底层数据结构》 https://blog.csdn.net/LearnLHC/article/details/89552420?spm=1001.2014.3001.5502《c++ map、multimap 的使用方法》 https://blog.csdn.net/LearnLHC..原创 2021-03-01 11:26:33 · 1194 阅读 · 0 评论 -
Qt 中 无法根据鼠标移动事件(mouseMoveEvent 无效)
一、setMouseTracking在Qt中要捕捉鼠标移动事件需要重写 MouseMoveEvent,但是 MouseMoveEvent 为了不太耗资源在默认状态下是要鼠标按下才能捕捉到。要想鼠标不按下时的移动也能捕捉到,需要setMouseTracking(true)这个属性保存的是窗口部件跟踪鼠标是否生效。1、如果鼠标跟踪失效(默认),当鼠标被移动的时候只有在至少一个鼠标按键被按下时,这个窗口部件才会接收鼠标移动事件。2、如果鼠标跟踪生效,如果没有按键被按下,这个窗口部原创 2021-02-22 17:39:03 · 5624 阅读 · 3 评论 -
QT 自定义日历插件
一、说明:自定义农历控件:1:可设置边框颜色/周末颜色/角标颜色/农历节日颜色2:可设置当前月文字颜色/其他月文字颜色/选中日期文字颜色/悬停日期文字颜色3:可设置当前月农历文字颜色/其他月农历文字颜色/选中日期农历文字颜色/悬停日期农历文字颜色4:可设置当前月背景颜色/其他月背景颜色/选中日期背景颜色/悬停日期背景颜色5:可设置三种选中背景模式,矩形背景+圆形背景+图片背景6:可直接切换到上一年/下一年/上一月/下一月/转到今天7:可设置是否显示农历信息,不显示则当做正常的日历使用.原创 2021-02-22 16:57:26 · 1102 阅读 · 1 评论 -
Qt 枚举变量的高阶技巧 - 枚举值和字符串之间的相互转换 - Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS
一、引用 枚举值宏 所解决的问题:1、Q_ENUM能够轻松完成枚举量和字符串之间的相互转化。枚举参数显示的是 int 类型,如:3。3 这个信息对于我们 调试或打印日志 很不友好。在方法内,我们并不知道这个 3 代表的是什么。为了解决这个问题,有了个很有用的特性:Q_ENUM2、Q_FLAG弥补 C++ 中结构体 无法组合使用,和 缺乏类型检查 的缺点,可以 拥有多个身份,如:enum Roles{ Admin = 1, Member = 2}上述定义了原创 2021-01-27 16:01:41 · 620 阅读 · 0 评论 -
QT 制作 gif 录屏 小工具
一、说明:不断地截取 选中的区域,然后将其制作成 gif 动图。二、效果图:1、可设置要录制屏幕的宽高,支持右下角直接拉动改变.2、可设置变宽的宽度3、可设置录屏控件的背景颜色4、可设置录制的帧数5、录制区域可自由拖动选择三、代码:1、main.cpp#pragma execution_character_set("utf-8")#include "gifwidget.h"#include <QApplication>#include <QTe原创 2021-01-26 14:52:02 · 475 阅读 · 1 评论 -
Qt 判断 是否 能连接到 互联网
第一种方法:可行 - 但受限于 QT 版本<QNetworkConfigurationManager>类QNetworkConfigurationManager mgr;if(!mgr.isOnline()){ qDebug() << "没有连接网络";}else{ qDebug() << "当前已联网";}【注意】:此种方法在一些版本上不能适用,版主 测试通过 版本: QT5.12.5第二种方法:不可用<QH..原创 2021-01-13 15:36:55 · 2610 阅读 · 1 评论 -
QStringList 与 QString 的相互转化
一、QStringList 转化成 QString - 使用 join 函数join 函数将 QStringList 中的所有字符串用一个分隔符连接起来变成一个字符串。例:strlist中有5个字符串,使用join将它们连起来,以逗号作为分隔符。结果为:这个在组sql语句时还挺有用的,值得一提的是分隔符还支持空格。二、QString 转化成 QStringList - 使用 split 函数join 函数是将 QStringLis t转为 QString,split 就是和.原创 2021-01-08 10:55:36 · 17324 阅读 · 0 评论 -
Qt 使用 QSS 对控件进行渐变处理 - qlineargradient线性渐变
前言:QT 一共支持三种渐变处理qlineargradient (线性渐变)qconicalgradient(圆锥渐变)qradialgradient(辐射渐变)1)QlineargradientsetStyleSheet("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 rgba(255,0,0,255),stop:0.5 rgba(0,255,0,255),stop:1 rgba(0,0,原创 2021-01-07 15:44:00 · 938 阅读 · 0 评论 -
Qt 与 JavaScript 网页端 通信和调用
前言主要使用 QWebEngineView 与 QWebChannel 来实现于 JavaScript 的交互【注】:需要 qwebchannel.js 文件,放在 .html 文件 同级目录下一、Qt 与 JS 交互:1、main.cpp#include "QtBaiduMapDialog.h"#include "QtJavascriptCommunication.h"#include <QtWidgets/QApplication>#include &.原创 2021-01-07 15:11:49 · 699 阅读 · 0 评论 -
QT 如何自动迁移 exe 相关依赖的库 dll
前言:Qt的应用程序编译出来之后,将单独的exe程序拿到其他PC上运行是运行不起来的,会提示缺少对应的动态链接库。我们需要去Qt的安装目录下找到所有的Qt程序运行时所依赖的,将他们和exe程序放到同一目录下,程序才可以执行。一、迁移工具 windeployqt根据上边的描述我们可以想象的到,如果手动去寻找应用程序依赖的动态库,这是一件非常麻烦的事情。其实我们完全没有必要这么辛苦,Qt给我们提供了一个寻找依赖项的工具windeployqt二、Windeployqt 的使用方法:如果原创 2020-12-03 17:09:11 · 346 阅读 · 0 评论 -
QT 消息按钮上绘制数字气泡
一、效果如下二、代码实现.h 文件#pragma once#include <QPushButton>class BubblelTipButton : public QPushButton{ Q_OBJECTpublic: BubblelTipButton(QWidget *parent); ~BubblelTipButton(); void setMsgNumber(int number);protected: virtual void pain原创 2020-11-05 14:33:16 · 1454 阅读 · 0 评论 -
QT 使用 SMTP 发送邮件 // POP3 收取邮件
目录一、邮件服务器和电子邮箱二、邮件传输协议1、SMTP协议2、POP3协议三、电子邮件的发送和接收过程四、SMTP 协议详解1、SMTP 发信方法2、SMTP 发信流程3、代码五、POP3 协议详解POP3 收信流程六、全球各大邮箱 的 服务器信息一、邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己的邮件服务器。.原创 2020-09-29 16:53:45 · 2544 阅读 · 0 评论 -
QT 获取本地存储空间大小、U 盘、SD 卡 - 进度条显示已用容量
目录一、附上效果图二、代码展示三、代码下载链接一、附上效果图二、代码展示.h#ifndef DEVICESIZETABLE_H#define DEVICESIZETABLE_H/** * 本地存储空间大小控件 * 1:可自动加载本地存储设备的总容量/已用容量 * 2:进度条显示已用容量 * 3:支持所有操作系统 * 4:增加U盘或者SD卡到达信号 */#include <QTableWidget>class QProcess;.原创 2020-09-28 11:24:05 · 2156 阅读 · 1 评论 -
QT 分页显示数据数据
一、效果展示二、核心代码.h//自定义模型设置列居中和右对齐class SqlQueryModel: public QSqlQueryModel{public: explicit SqlQueryModel(QObject *parent = 0);protected: QVariant data(const QModelIndex &index, int role) const;private: bool allCenter;原创 2020-09-27 19:02:14 · 1224 阅读 · 0 评论 -
QT 代码行统计工具
一、效果展示二、代码展示.h#ifndef FRMCOUNTCODE_H#define FRMCOUNTCODE_H#include <QWidget>namespace Ui {class frmCountCode;}class frmCountCode : public QWidget{ Q_OBJECTpublic: explicit frmCountCode(QWidget *parent = 0); ~frmCountC原创 2020-09-27 15:29:55 · 2586 阅读 · 0 评论 -
QT 自制实用工具类(进制转换、加密解密、异或校验、CRC校验 等)
.h//全局静态方法类class QUIHelper : public QObject{ Q_OBJECTpublic: //桌面宽度高度 static int deskWidth(); static int deskHeight(); //程序本身文件名称 static QString appName(); //程序当前所在路径 static QString appPath(); //新建目录 static v原创 2020-09-25 16:33:35 · 1080 阅读 · 2 评论 -
QT 生成九宫格 图片 - 带分割线
先附上成果图:附上代码QtTools.h#pragma once#include <QtWidgets/QDialog>#include <QPixmap>#include "ui_QtTools.h"class QtTools : public QDialog{ Q_OBJECTpublic: QtTools(QWidget *parent = Q_NULLPTR); //九宫格图片 horzSplit-宫格1/3/7/9宽原创 2020-09-25 15:42:06 · 1255 阅读 · 0 评论 -
QT 屏幕拾色器 - 获取 屏幕某点的颜色值
原理:通过 qApp 获取桌面 句柄使用 QPixmap::grabWindow 函数,获取鼠标点选位置的图片分析图片的像素,最终获取 颜色值int x = QCursor::pos().x();int y = QCursor::pos().y();QString strDecimalValue, strHex, strTextColor;int red, green, blue;#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)).原创 2020-09-24 18:12:00 · 3006 阅读 · 0 评论 -
QSS样式表汇总
目录1、关于QPushButton的样式表2、关于QComboBox的样式表3、关于QSlider的样式表4、关于QProgressBar的样式表5、关于QMenu的样式表6、关于QListWidget的样式表6"、关于QListView的样式表7、关于QTreeWidget的样式表8、关于QGroupBox的样式表9、关于QTabBar的样式表10、去除表格中的虚线11、关于QTableWidget的样式表12、关于QScrollBar的样式表1、关原创 2020-09-18 17:55:12 · 13748 阅读 · 0 评论 -
QT 实现 以名片列表的形式 显示 10万 条数据 - 如何流畅的显示十万条数据
1、常用实现方式 - 有多少就创建多少,就显示多少MainWindow.h文件#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QWidget>#include <QTableWidget>#include <QVBoxLayout>#include <QTableWidgetItem>#include <QList>#include <QString>st原创 2020-09-01 17:52:34 · 1420 阅读 · 0 评论 -
QT 带 进度条 解压缩文件方法 - QuaZip
QuaZip介绍QuaZip是基于zlib在Qt中封装,很好的支持了文件夹的压缩/解压,比原生Qt自带的qCompress/qUncompress好用太多。编译库文件QuaZip官方只提供了源码,要想在自己的工程中使用需要先编译成库文件。QuaZip依赖zlib库,zlib库在Qt5中已有,直接引用即可,一般位置在:D:\Qt\Qt5.6.3\5.6.3\msvc2013\include\QtZlib官方下载地址: https://sourceforge.net/p.原创 2020-08-24 17:24:50 · 1700 阅读 · 0 评论 -
QT 程序休眠一段时间
1、QTime直接上代码:QTime t;t.start();while(t.elapsed()<1000) QCoreApplication::processEvents();最后一句话的含义:不停地处理事件,以使得程序保持响应原因:主函数中:return a.exec();这个exec启动了一个事件循环,如果在main函数里加了个类似while(1)的死循环,那么event loop就无法启动了导致的问题就是程序正常的事件无法响应,比如label无法.原创 2020-08-21 17:08:26 · 783 阅读 · 0 评论 -
QT 绘制窗体阴影 + 窗体拖动(右边和下边增加由深到浅的阴影)
1. 绘制窗体的阴影void ShadowWidget::paintEvent(QPaintEvent * event){ QDialog::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); QColor color(0, 0, 0, 50); for(int i=0; i<10; i++) { QPainterP.原创 2020-08-10 14:58:58 · 491 阅读 · 0 评论 -
QSettings 操作注册表 与 ini 文件的优劣
1. QT 帮助文档中的简介QSettings类提供了持久的跨平台应用程序设置。用户通常期望应用程序记住它的设置(窗口大小、位置等)所有会话。这些信息通常存储在 Windows 系统注册表,OS X和iOS的属性列表文件中。在Unix系统中,在缺乏标准的情况下,许多应用程序(包括KDE应用程序)使用INI文本文件。QSettings围绕这些抽象技术,使我们能够以便携的方式保存和恢复应用程序设置。它还支持自定义存储格式。QSettings API基于QVariant,可以保存很多基础的类型,比原创 2020-08-05 14:52:20 · 942 阅读 · 0 评论 -
QT 多语言切换 - Qt Linguist - 三种语言以上
0.工具说明: 工具 lupdate 提取字符串,形成 ts 文件 工具 Qt Linguist QT语言家,人工手动翻译 ts 文件; 工具 lrelease 发布,将人工翻译后的 ts 文件,整理生成二进制语言 QM 文件; 备注: 运行lupdate产生一组翻译源(TS)文件,里面含有所有用户可见的文本,但未经过翻译。 把生成的TS文件交给翻译者(谁使用Qt Linguist添加翻译)。Qt Linguist关注任何源文本的改变或删除。 运行lu原创 2020-08-05 11:29:08 · 663 阅读 · 0 评论 -
日期与时间控件QDate, QTime, QDateTime
1. 日期格式符:d 没有前导零的数字的日期(1到31)ddd 缩写的本地化日期名称(例如'Mon'到'Sun'dddd 完整本地化的日期名称(例如“星期一”到“星期日”)M 没有前导零的数字的月份(1-12)MM 月份为前导零的数字(01-12)MMM 缩写的本地化月份名称(例如'Jan'到'Dec')MMMM ...原创 2020-03-27 15:22:09 · 1682 阅读 · 0 评论 -
HTTP 协议详解
HTTP 协议定义协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议 (HTTP) 是一种通信协议,它允许将超文本标记语言 (HTML) 文档从 web 服务器传送到客户端的浏览器网页是如何显示的Request 与 Response我们输入 URL 后,我们的浏览器给 Web 服务器发送一个 Request,Web 服务器接到 Request ...原创 2020-02-17 20:24:34 · 2394 阅读 · 1 评论 -
Http post 、 get 区别与代码示例
一、Get 和 POST 方法的区别Http 协议与服务器交互,最基本 4 种方法:GET、POST、PUT、DELETE,对应着这个资源的查、改、增、删 4 个操作。GET 一般用于获取/查询资源信息,而 POST 一般用于更新资源信息区别:GET 提交的数据会放在 URL 之后,以 ?分割 URL 和传输数据,参数之间以 & 相连,如 EditPosts.aspx?name=...原创 2020-02-17 20:19:47 · 690 阅读 · 0 评论 -
QT自定义旋转控件
代码如下:#pragma once#include <QLabel>class comRotateLabel : public QLabel{ Q_OBJECTpublic: comRotateLabel(QWidget *parent); ~comRotateLabel(); void SetImage(QImage * image); void Se...原创 2019-12-18 17:44:31 · 1581 阅读 · 0 评论 -
Qt5.12.0 / Qt5.12.5 请求 https 资源提示 TLS initialization failed
一、Qt5.12.0 请求 https 资源提示 TLS 初始化失败1. 首选需要找到缺失的 libea32.dll 和 ssleay32.dll 两个库:【注】确保 QT 版本 与 libea32.dll 和 ssleay32.dll 库的版本一致,方法如下,查看 QT 依赖版本:QString N1 = QSslSocket::supportsSsl();QString N...原创 2019-10-15 14:17:10 · 1204 阅读 · 0 评论 -
QTL 容器 与 STL(1)- 写时复制
QTL 与 STL 最大的区别之一隐式共享,引用计数,写时复制【注】STL 的 string 也具有 写时复制 技术写时复制 (Copy-On-Write)技术,就是编程界“懒惰行为”——拖延战术的产物。 1、复制的时候共享内存,只有修改(或 [ ] 操作)的时候,才分配新内存QVector<int> v1;v1 << 1 <&...原创 2019-06-17 14:40:43 · 506 阅读 · 0 评论