![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
QT
文章平均质量分 57
漫步繁华街
这个作者很懒,什么都没留下…
展开
-
Qt QWidget 设置样式表不生效的两种解决方案
Qt QWidget 在Designer 中设置样式表,运行不生效的两种解决方案原创 2023-01-30 15:41:57 · 8418 阅读 · 1 评论 -
Qt QTextEdit 设置 QScrollBar 样式表不生效解决方案
Qt QTextEdit 设置 QScrollBar 样式表不生效的两种解决方案原创 2022-06-30 15:15:15 · 6264 阅读 · 2 评论 -
QPieSeries QPieSlice label 标签重叠解决方案
QPieSeries QPieSlice label 标签重叠解决方案一般情况下做这种饼状图很简单,如: QPieSeries *series = new QPieSeries(this); series->append("迟到人数22", 22); series->append("旷工人数35", 35); series->append("正常出勤人数97", 97); series原创 2022-04-26 17:55:18 · 2195 阅读 · 0 评论 -
Qt 强杀进程、子进程(应用)的一种方式
一、背景一般情况下,程序退出时,它调用的所有子进程都会一起退出。但异常退出的时候,并非所有的子进程都能正确退出。所以我们的做法一般都是在程序启动的前来一次检查,将上次启动没有退出的子进程杀掉,然后再继续运行程序。二、清理进程方式一1. 使用QProcess 执行杀进程命令:void ClearProcessByProcessName(const QString &strPrcessName){ if (strPrcessName.isEmpty()) {原创 2022-03-08 15:33:05 · 3801 阅读 · 0 评论 -
Qt Creator release版本进行调试
一、背景:我们在进行性Qt Creator 进行开发时,想要调试代码,通常是只需要编译 debug 版本的程序。但对于很多大型项目,引用外部第三方库中难免只存在release版本的动态库,所以,当我们的程序进行debug 调试时,往往会编译不过,导致无法调试。所以,如果我们的代码编译release版本的程序,也可以进行debug 调试就好了。二、 Qt 全局设置1. 进入Qt 的安装目录,打开编译器目录中的 msvc-desktop.conf 文件进行配置2. 设置属性将 QMAKE原创 2022-03-07 14:24:27 · 21235 阅读 · 2 评论 -
Qt 实现 Dismiss Dialog 对话框的一种方式
我们经常会遇到这样的需求,鼠标点击某个按钮之后,会弹出来一个选择框。如果鼠标点击其他地方,这个选择框就会消失的需求,例如微信表情框:Qt 实现方式不止一种,我们这里说一种最简单的方式。1. 点击Mainwindows里的按钮,我们在鼠标点击的位置显示一个对话框(QWidget):void MainWindow::on_pushButton_2_clicked(){ if (form == nullptr) { form = new Form(this);原创 2022-03-07 10:51:52 · 15646 阅读 · 0 评论 -
Qt cef3 无边框程序最小化之后,再打开 hover 状态失效
1. 使用qt + cef3 开发的 pc 桌面程序出现一个奇怪的问题,描述如下:1. 程序最小化之后,再最大化,所有Qt 按钮的hover状态都失效。2. hover 失效后的程序,showNormal 之后再 showMax。 hover状态又恢复正常。3. 将cef 加载的链接屏蔽掉,只保留C++框架,所有Qt 按钮的hover状态正常。2. 解决方法:在mainwindow 的 showEvent()函数里面设置Qt::WA_Mapped属性:void showEve原创 2021-09-23 17:51:40 · 14886 阅读 · 0 评论 -
PC C++ Qt 桌面软件防止重新启动
越来越多的 windows 桌面程序要求防止重复启动,或者说只允许同时启动一个。实现方式有很多,我们接下来梳理一下常用的做法:一、创建互斥量原理:使用 windows 系统函数 CreateMutex ,一般根据唯一的应用程序的名称来找出当前系统中是否已经存在了指定进程的实例,如果没有,则会创建一个。注意: 程序退出时,一定要调用CloseHandle(m_hMutex),不然后果很严重,可能导致以后的程序无法打开。#include "stdafx.h"#include "window.原创 2021-09-14 16:36:16 · 16027 阅读 · 0 评论 -
C++ Qt windows 利用 Copydata 方式进行进程间通讯
1. 头文件:#include <windows.h>#include <tlhelp32.h>2. 发送方:void sendMessage(){ // 根据窗口名称查找窗口句柄 HWND hWnd = ::FindWindowA(("myWindowsName"), NULL); if (hWnd == nullptr) { return; } // 组装copydata信息 std::原创 2021-08-16 18:14:07 · 14746 阅读 · 0 评论 -
二选一的时候到了,Qt Widgets 还是 Qt Quick ? 致Qt开发伙伴
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、Qt QWidgets 和 Qt Quick 各自有什么特性、特点? 1.Qt QWidgets 2.Qt Quick 二、开发一款软件,选用Qt QWidgets 还是 Qt Quick? 1.Qt QWidgets 2.Qt Quick 总结前言我们都知道,我们网校的大部分PC客户端软件都是采用基于Qt的应用程序开发框架来实现的。其中,对于客户端软件,全部或部分使用Q.原创 2021-06-30 16:53:57 · 27904 阅读 · 4 评论 -
Qt Quick QML 与 C++ 交互系列之二
上次说了 C++ 与 QML 交互一共有四种:注册 C++ 对象到 QML,在 QML 中访问 C++对象; QML 暴露对象给 C++ 进行交互; C++ 创建 QML 对象并进行交互; C++ 对象与 QML 通过信号槽进行交互;我们再次强调一下,这四种交互方式,是每一个要学习 QML 的程序员必须要深刻理解并熟掌握的。今天重点介绍三种方式:C++ 创建 QML 对象并进行交互 的方法;为了更快的进入节奏,我们今天还是在上次项目的基础上进行修改。1. 首先,我们创建一个 “Win原创 2020-10-28 15:43:55 · 18432 阅读 · 3 评论 -
Qt Quick QML 与 C++ 交互系列之一
QML 作为一种灵活高效的界面开发语言已经越来越得到业界的认可。QML 负责界面,C++ 负责逻辑,这也是 Qt 官方推荐的开发方式。那么 QML 与 C++ 的交互必然是每一个Qt开发老师需要掌握并且精通的。接下来,我们会对QML 与 C++ 交互的几种方式进行详细讲解。我们通过创建项目,通过例子来实现、体验并应用这几种交互方式,让我们由浅入深理解其中的原理。首先,QML 与 C++的交互大致可以分为4种形式:注册 C++ 对象到 QML,在 QML 中访问 C++对象; QML 暴露对象给原创 2020-10-24 17:44:50 · 20897 阅读 · 16 评论 -
QT 遍历 删除 QMap
QMap<int, QWidget*>::iterator iter = m_pages.begin(); while (iter != m_pages.end()){ if (presistMenuIds.contains(iter.key())) { iter++; continue; } int key = iter.key(); iter++; ...原创 2020-09-14 11:26:21 · 17249 阅读 · 1 评论 -
QString 与 LPCWSTR 互转
一、 QString 转 LPCWSTR QString myStr("hello world"); std::wstring wlpstr = myStr.toStdWString(); LPCWSTR lpcwStr = wlpstr.c_str();二、 LPCWSTR 转 QStringQString myStr = QString::fromStdWString(lpcwStr);原创 2020-08-19 18:24:11 · 18096 阅读 · 1 评论 -
QT error: LNK2019: 无法解析的外部符号 __imp__SendMessageW@ 类型的错误 以及 pragma comment 的作用(用法)
使用QT Creator 开发一个通讯项目时候,需要使用windows系统函数,比如:#include <windows.h>#include <WinUser.h>...::IsWindow(server)::FindWindowW(nullptr,title); ::SendMessage(server, WM_COPYDATA, reinterpret_cast<WPARAM>(sender), reinterpret_cast<LPAR原创 2020-08-18 17:06:41 · 29623 阅读 · 8 评论 -
使用 C++17 fold 表达式来大幅提升的QString的拼接效率
一、前言最近学习C++17,发现一个有趣的表达式-fold expression(折叠表达式)。为什么说它是有趣的?我们先说一下另外一个C++的特性-变参模板(variadic template),这是C++11新增的的特性,作用就是它可以接受任意个模版参数,参数包不能直接展开,需要通过一些特殊的方法,比如函数参数包的展开可以使用递归方式或者逗号表达式,在使用的时候有点难度。而这次C++17中...原创 2020-03-27 19:11:19 · 16997 阅读 · 0 评论 -
深入探究Qt HTTP的内部构架
一、前言当今互联网时代中,B/S(Browser/Server , 浏览器/服务器)以及C/S(Client/Server , 客户端/服务器)架构已经是绝对的主流软件架构设计方式(除了极少部分的单机软件),它们各有优缺点,这里我们不展开讨论。但是B/S以及C/S架构软件都会有Server,也就是B/S或者C/S中的S,无论是Browser还是Client都必须与Server进行数据交互、传输,...原创 2020-02-14 12:02:16 · 17336 阅读 · 2 评论 -
PC端C++软件, 开启大地址,让32位程序使用4G内存
我在以前的文章中分析过软件的内存模型(链接点击这里),从中我们可以知道,程序运行起来以后,它将有自己独立的虚拟地址空间。这个空间的大小与操作系统的位数有关。目前使用C++开发的PC端软件一般都是开发32位的。那么32位的软件,最大寻址空间也就是4GB。其中很重要的一部分是给系统内核使用的内核空间。在32位的windows操作系统中,高地址的2GB空间就是给内核使用的内核空间,用户程序空间只有2GB...原创 2019-12-25 18:48:59 · 18397 阅读 · 0 评论 -
一文让你学会PC软件升级,学不会过来打我
//创建新版本文件夹 emit changeText(QString("创建新版本文件夹...")); QString mainDir = QDir(m_OldVerPath + "/../").absolutePath(); m_NewVerPath = mainDir + "/" + m_NewVersion; result = FileOperate...原创 2019-12-20 14:58:50 · 19429 阅读 · 8 评论 -
C++ 内存泄露检测工具-Visual Leak Detector(VLD)
上一次我们对C++程序内存泄漏进行了总结,那么要想检查一个程序是否存在内存泄漏,面对动辄几万行的代码,想要一行一行的审查代码检查是否内存是否泄漏,显然效率很低,对于更大的项目也不太现实。所以我们需要借助一款能够自动检测内存是否泄漏(Memory Leak)的工具,就是我们今天要讲的Visual Leak Detector(VLD)一、工具描述:Visual Leak Detector是一个免...原创 2019-10-16 15:29:48 · 18062 阅读 · 0 评论 -
C++ QT内存泄漏总结
对于编程来讲,每种语言都有各自的内存管理机制,他们并不是完全相同。有的语言比如JAVA、H5等无需编程人员关心内存是怎样创建,怎么释放的,系统会对内存自动管理。但是有些语言比如C、C++等,就需要程序员手动进行内存管理,比如需要的时候进行内存申请,不用的时候需要进行手动释放。在C++中,new与delete必须配对使用(既,有一个new,有且只能有一个delete)。delete少了,可能会造成...原创 2019-10-15 19:12:43 · 2056 阅读 · 0 评论 -
cef3 js 调用c++
1.在render 进程里 注册函数#include "RenderProcessHandlerDelegateBase.h"namespace webkernel{ namespace render { void CreateDelegates(RenderDelegateSet& delegates); }}#endif#include #include "incl原创 2018-02-02 15:17:47 · 2659 阅读 · 0 评论 -
QT CEF3 消息循环处理
初次写博客,可能有点乱, 按照自己的实际经历谈一下CEF3钟遇到的一些坑,希望对以后的小伙有些帮助。 先说一下经历,当初第一次接触CEF3的时候,没做特殊处理,直接将cef3封装成控件,嵌入到QT程序中,结果QT就响应不了鼠标事件了,后来经过查资料,发现是cef3的事件循环和QT的事件循环冲突了,所以QT处理不了鼠标事件了,就是鼠标只能点击网页有反应,点击QT控件就没反应。 我原创 2018-02-02 12:07:13 · 6599 阅读 · 8 评论 -
Qt QtCreator 所有版本官方下载地址
直接跳过输入账号,选择所需版本。废话不多说,直接上链接1.所有版本QT下载地址 : http://download.qt.io/archive/qt/2. 所有Qt Creator下载地址:http://download.qt.io/archive/qtcreator/3. 所有Qt VS开发插件下载地址原创 2018-02-03 14:00:59 · 66196 阅读 · 6 评论 -
QT JSON 字符串操作(解析与写入)
QT 有专门对于json字符串得处理类QJsonDocument相关类。下面是一种我常用的json解析1.Json解析 读取QJsonParseError error;QJsonDocument document = QJsonDocument::fromJson(data.toUtf8(), &error);if(QJsonParseError::noError == error.e...原创 2018-02-03 14:23:08 · 6901 阅读 · 0 评论 -
qt Connect 连接两种方式
qt Connect 函数是连接信号和槽函数的连接函数。现在有两种方式。1.connect(*SenderObj, &SenderClass::signalMethod, *ReceiveObj, &ReceiveClass::slotMethod)这种方式不要求slot函数必须是槽函数,可以是private,也可以是public类型。假如signalMethod原创 2018-02-03 15:12:27 · 14119 阅读 · 2 评论 -
QT connect ConnectionType 函数连接类型
qt中connect 函数一共有5个参数,前四个我们一般都要用,第五个为连接类型ConnectionType是一个缺省的参数,默认为自动连接方式,我们查阅QT帮助文档可以看到。我们来看一下这个参数有哪些值:1. Qt::AutoConnection:自动(默认)。信号发射对象如果和槽的执行对象在同一个线程,将是直连方式,否则就是队列方式。2. Qt:原创 2018-02-03 15:53:45 · 6355 阅读 · 3 评论 -
QFontMetrics 计算字体的高度和宽度
1.使用QFontMetrics 类可是计算出一个字符串的高和宽。 QFont font("times", 24); QFontMetrics fm(font); int pixelsWide = fm.width("What's the width of this text?"); int pixelsHigh = fm.height();...原创 2018-02-09 19:00:48 · 9277 阅读 · 0 评论 -
QT QFont相关学习记录
1.学习QFont之前,我们先来认识一下字体的family属性,这是使用什么字体,比如我们常见的“宋体”,“楷体”以及“微软雅黑”之类的字体。 那么Qt都有哪些字体呢?在QFont类中,好像并没有介绍到。不过查找资料我们发现QT还有另一个类QFontDataBase,从这个类中,我们能够得到当前系统所有的字体(family)名称。所以我们先简单地认识一下QFontDataBase类。1.1 返回系...原创 2018-02-09 16:32:45 · 4231 阅读 · 0 评论 -
QT QPen 学习记录
使用QT很多年了,一直没有系统性的总结一下QPen,今天又全面复习总结一下。QPen 类定义了QPainter 应该怎样画线条和形状的轮廓。 对于QPen 画笔有以下几个重要特性。1.color(): 定义了线条的颜色。使用setColor(QColor(255, 0, 0, 100))定义画笔的颜色。2.width():定义了线条的宽度。使用setWidth(int width)设置线条的宽度。...原创 2018-02-10 15:40:55 · 15336 阅读 · 0 评论 -
QT 信号toggled triggered区别
在QT的学习中,很容易遇到一些困惑,比如说,对于一个QAction来讲,信号既有toggled(bool checked)也有triggered(bool bChecked)两个信号,他们到底有什么区别呢?我们通过查找资料和实验我们可以找出他们中的区别: toggle 类似开关。 具有2个状态,打开/关闭。 使用这个信号,是在这2个状态之间切换。checkable按纽或是图标的槽函数应该...原创 2018-02-10 16:50:12 · 24830 阅读 · 0 评论 -
QT QGraphicsScene QGraphicsView QGraphicsItem学习记录
一.场景(QGraphicsScene)QGraphicsScene 提供了图形视图框架的场景,相当于一块画布,并具有以下功能。1.一个管理大量图形项的快速接口。2.向每个图形项传播事件3.管理图形项的状态,比如选择,焦点处理等4.提供无转换的渲染功能,主要用于打印简单地一个场景使用 QGraphicsScene scene;//场景 scene.addTex原创 2018-02-05 18:50:26 · 9395 阅读 · 0 评论 -
QT5 中文显示乱码,编码用utf-8编码
QT5 项目中,中文错误有两种方法,分享如下:1. 就是用utf-8编码 在 .cpp 中 最上端添加以上代码#pragma execution_character_set("utf-8") 2.使用宏QString str = QStringLiteral("我是中文!") 3.使用QString的方法QString str = QString::fro...原创 2018-02-10 17:18:10 · 10296 阅读 · 1 评论 -
QT 寻找可执行文件的依赖文件
使用c++ qt编译出来的文件,单独拿出来放到一台没有安装QT环境的计算机中,一般是不可以直接运行的,一般会报错“无法启动此程序,因为计算机中丢失Qt5Widgets.dll。尝试重新安装改程序以解决此问题。”比如下图: 这是因为编译好的可执行程序需要依赖文件。但是这些依赖文件程序找不到,那么怎么寻找QT可执行程序的依赖文件呢?这里一般包含两部分,一部分为系统依赖文件,另一部分为程序...原创 2018-02-09 20:23:03 · 2951 阅读 · 0 评论 -
QT 之QBrush 与渐变
在平时编程中,QBrush定义了绘图过程中,填充形状的模式或规则。在QPainter,QPen类中,是个很重要的属性。QBrush 有 以下几种重要属性1.style() :定义了填充模式,默认的style为Qt::NoBrush(取决于你怎样创建的格式刷)这种方式告诉画笔不要去填充图形。 可以通过setStyle()来设置填充模式。 下面我们就来看看所有画刷的样式,我们从官方帮助文档里找到了答案...原创 2018-02-11 10:20:43 · 4682 阅读 · 0 评论 -
NSIS 安装包制作超详细 实例教程 utf-8编码
一.准备工作1. 打开D盘,新建 “code” 文件夹,并在“code”文件夹下新建“jd_excute”文件夹 2. 将代码文件夹 源代码文件夹“src” 拷贝到 “D:\code\”目录下 3. 打开QtCreator (开始-所有程序-Qt 5.7.1-Qt Creator4.2.0(Community)) ] 二.终端程序生成1. 打开终端项目(文件-打开文件或项目(O)-选择“D:\co...原创 2018-02-12 11:31:09 · 6655 阅读 · 0 评论 -
QT 窗口关闭 程序进程不退出
QT程序,窗口关闭,程序不退出只需设置QApplication::setQuitOnLastWindowClosed(false);原创 2018-02-12 18:37:35 · 10172 阅读 · 1 评论 -
QT 设置程序图标
在qt应用程序中,我们能想到的图标一般就以下三种:icon种类应用窗口左上角的 图标setWindowIcon()状态栏上显示的图标setWindowIcon()可执行程序本身的图标两种设置方式,下面会讲对于以上三种图标都该怎么样设置呢?一.我们先来讨论前两种,分别是窗口左上角的图标和状态栏的图标, 其实这两种图标只需要设置一次就可以了,他们总是相同的,并没有专门针对状态栏图标设置的函数。二...原创 2018-02-13 11:11:29 · 55660 阅读 · 11 评论 -
QT 接收拖拽文件
比如有这样一个功能,点开一个按钮,然后选择或者打开一个文件。但是一步一步的选择有点麻烦。有没有简单一点的方法呢?我们想要找到一个文件,然后直接拖到程序里,就能得到这个文件的地址。好吧,有三个要点:1.设置属性this->setAcceptDrops(true);2.实现虚函数 dragEnterEvent()void MainWindow::dragEnterEvent(QDragEnter...原创 2018-02-13 15:00:53 · 7800 阅读 · 1 评论 -
QT 注释模板
QT中注释一般就有: 1.单行注释 // //int a; //return a+b;2.多行注释/**/void MainWindow::dropEvent(QDropEvent *event){ /* QString name = event->mimeData()->urls().first().toString(); ui->lin...原创 2018-02-13 15:27:23 · 4911 阅读 · 1 评论