自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 QLabel文字两端对齐解决方案

使用QProxyStyle + Qt::TextJustificationForced实现QLabel文字两端对齐

2024-01-08 23:01:58 781

原创 一个Qt鼠标透传场景与事件过滤器的用法

Qt使用事件过滤器解决鼠标透传与QScrollArea的冲突场景

2023-09-12 23:33:00 686

原创 Qt实现一个简单的放射式弹出菜单

使用Qt QWidget实现一个简单的放射式弹出菜单,支持简单的动画和拖拽。可设置弹出角度和范围,可设置动画时间等

2023-08-30 22:41:14 393 1

原创 Qt使用QQuickWidget的输入法问题(Qt5.12及以前)

本文针对Qt5.12.2及之前的版本可能出现的QQuickWidget输入法异常问题,研究了背后的原理,并提供了一些解决办法。

2023-07-31 23:17:30 880 2

原创 Qt QWidget 独立窗口抗锯齿圆角的一个实现方案(支持子控件)

针对QWidget有子控件的窗口,实现抗锯齿的圆角裁剪

2023-04-24 10:32:41 1396

原创 Windows平台鼠标按下标题栏的阻塞问题研究(使用Qt框架)

在Windows标题栏按下鼠标左键、右键时,会出现窗口阻塞问题,包括窗口停止绘制、定时器触发等。本文使用Qt测试并尝试提出自己的解决方案,因为是Windows本身缺陷,需要通过Windows消息解决。

2022-10-29 23:40:21 1612 2

原创 Qt绘制椭圆曲线的角度问题(离心角和旋转角)

使用Qt绘制椭圆曲线,由于旋转角与离心角的差异,导致达不到绘制期望。本文尝试提供转换的方法,方便计算离心角。

2022-08-09 21:37:23 2129 6

原创 关于研究鼠标绘制平滑曲线的阶段总结

关于鼠标绘制平滑曲线的研究总结,整理一些曲线拟合相关的进展,和最终成果

2022-07-29 22:43:48 2024 4

原创 个人实现的可任意折叠QToolBox——AdvancedToolBox

自己实现的AdvanceToolBox,增强QToolBox功能。支持使用样式表设置标题样式,支持动态折叠展开、调整高度、自动布局。目前仅支持垂直布局。

2022-07-27 11:48:38 2477 3

原创 关于Qt高频率信号槽合并的误解和方案

Qt开发过程中,面对高频率的信号触发,开发者会希望将信号合并。本文由简入难提出几个方案,尝试解决不同的应用场景。

2022-07-08 00:59:43 1053 4

原创 Qt信号槽与事件循环的关系

本文通过几个例子来研究Qt信号槽与事件循环的关系,帮助初学者遇到信号槽无法正确触发时快速定位问题。

2022-06-18 17:57:36 2129 1

原创 一种奇怪的函数声明写法

typedef定义函数类型的函数声明写法最近网友遇到个问题:typedef void(FunType)(int);FunType a;这种写法,a是的什么东西,可以编译通过,用gcc测试输出a,结果是1。但是msvc,尝试输出a时会报错,int a(int,int)无法解析的外部符号之类的。还好msvc的错误比较明确,既然是a的链接出了问题,尝试在别处写个定义:void a(int){}编译通过,msvc输出变成了函数地址。结论通常都是定义函数指针类型:typedef void(

2022-05-18 22:48:42 340

原创 Windows平台Qt无边款窗口技术细节

Windows平台Qt无边框保留系统移动、缩放特效的设计细节,并提供Win11最大化按钮弹出snap layout的设计方案。

2022-05-15 02:15:07 2894 9

原创 Qt使用私有接口绘制窗口阴影

Qt使用私有接口绘制窗口阴影大多数软件UI设计都喜欢给控件增加阴影来制造分层效果,而比较好的阴影通常需要算法生成。在Qt中主要有两个方法来实现:QGraphicsDropShadowEffect该方法在指定QWidget下方生成阴影效果,可以设置颜色、偏移、阴影半径。该方法原理是先截取指定QWidget的渲染图像,对图像缩放、填充、模糊,绘制到下面的图层,效果很好。但有个非常大的缺点,由于需要考虑阴影图层的绘制,可能会影响整个窗口的渲染,一些状态不能及时刷新。而且,当阴影区域比较大时,效率非常低。

2022-04-12 01:16:44 1304 2

原创 Qt程序字体初始化引起的白屏问题

Qt程序启动时字体初始化的白屏问题很早之前发现一个Qt启动时的白屏问题、新建一个Qt项目,在ui文件窗口中仅添加一个按钮,不做布局,编译并运行,窗口显示后会发现有个短暂的白屏过程。如果做个布局,把按钮放进去,则不会出现白屏,但窗口显示会有稍微的延迟。经过调试源码发现,第一次绘制按钮的堆栈里,QPlatformFontDatabase::fallbacksForFamily是一个比较耗时的同步调用,这个过程应该是获取系统里的字体信息。Qt5.15 + win10 + i7七代测试,大概350ms,也跟

2022-04-10 13:13:04 1702

原创 Qt中输入框在Win10上“Win+/“快捷键的一个Bug

Qt中输入框在Win10上"Win+/"的输入法Bug最近项目测试中偶然发现Win10上使用微软输入法,按“Win + /”快捷键会导致UI假死或无法输入中文,Win11没有复现。猜测应该是微软中文输入法的Bug,测试了QQ输入法和日语输入法,都没有问题。问题复现Qt窗口放一个输入框,先输入几个字符,切换到微软输入法,按Win+/快捷键(有的版本可能直接卡死),然后继续输入中文,能看到拼音和候选词窗口,选择候选词没有效果。微软官网上“Win+/”快捷键操作是“Begin IME reconversi

2022-01-18 23:55:12 372

原创 Qt列表下方增加弹出加载数据提示效果

使用QScrollEvent在Qt列表下方弹出需求最近有个需求是在列表下方增加一个“加载更多数据”的提示,当后台在请求数据的时候提示用户。在我的这篇 QScroller的QScrollerProperties参数研究 文章中,研究了一下鼠标手势的列表滚动参数,里面提到了过量滚动的一些设置,可以借用这个效果来实现。以下是最终效果,为了方便测试,当滚动条处于最底端,并继续尝试滚动时,弹出该提示:方案研究了一下QScroller的源码,发现是通过向目标窗口发送 QScrollEvent 实现滚动和过量

2021-11-03 22:40:52 675

原创 Qt Bug: MacOS平台非激活窗口右键菜单导致输入框光标不显示

MacOS平台上右键菜单导致输入框光标不显示问题很好复现,在桌面点击,使窗口处于非激活状态,此时输入框光标消失。直接在窗口上右键,弹出右键菜单后选择一个,菜单关闭,可以看到输入框没有了闪烁的光标,以下是Qt5.9.9测试结果:解决办法没有具体研究是什么导致了该问题,通过日志输出可以发现,光标消失后,QApplication::activeWindow返回空。所以尝试手动调用QApplication::setActiveWindow重设一下。考虑到目前没有其他复现的过程,所以通过全局拦截QEvent

2021-08-05 22:40:55 432

原创 QScroller的QScrollerProperties参数研究

使用QScroller拖拽效果的参数研究过QScrollerProperties通过丰富的参数实现拖拽的很多动画细节,本文以鼠标手势为测试,做个简单整理。以下是目前的所有属性:QScrollerProperties::MousePressEventDelay设置一个鼠标事件延迟时间,单位s。当鼠标按下后,开始手势识别,如果在该时间内开始了拖拽手势,窗口不会收到鼠标事件。如下动图,当鼠标开始点击后,1秒后,列表响应了按下事件:QScrollerProperties::DragStart

2021-07-24 16:43:56 2452 4

原创 Win32屏幕坐标转换Qt坐标

Win32消息的屏幕坐标如何转换Qt坐标偶尔一些情况,需要将Win32 API获取到的鼠标位置转换到Qt的窗口坐标中,常见的方法是除以当前窗口的缩放(QPaintDevice::devicePixelRatioF或者其他),这样做是不准确的,只适合单屏幕。实际原始坐标是基于整个桌面系统的坐标,而Qt的坐标则是基于屏幕与缩放后的坐标。可能鼠标位置确实在窗口上,但通过QWidget::mapFromGlobal就不知道转到哪里去了。下面是准确的办法:int x = GET_X_LPARAM(msg-&g

2021-07-21 22:18:02 754 1

原创 QTableView使用QTextDocument绘制Html的缩略支持

QTableView使用QTextDocument绘制单行Html的文本缩略支持如果要在QTableView的单元格支持Html,通常做法是使用QTextDocument绘制,由于带有标签的Html文本总是长于实际显示的文本,所以无法直接使用QFontMetrics::elidedText。如果对纯文本进行缩略,又不好判断对应Html是哪部分被替换了。实际上,QTextDocument支持文本编辑,Html文本会被转化为Qt的格式,因此,使用坐标去测试文本是否超出显示区域,再进行替换,可实现不同的缩略

2021-07-04 14:55:08 1096 1

原创 修改 QtCreator 配置解决 “无法运行 rc.exe” 问题

Qt 关于“无法运行 rc.exe”的解决办法问题描述当电脑里装了多个的Visual Studio版本或者使用更新的版本时,Qt可能会出现 无法运行 “rc.exe”,主要集中在Win10 + MSVC2015这个版本上。首先,使用VS2017或者VS2019可以通过安装 “VS2015 C++生成工具”来安装MSVC2015的环境,这样就不需要独立安装vs2015。MSVC的环境使用vcvarsall.bat来初始化,可以在QtCreator看到对应编译器的初始化命令(14.0是VS2015的编

2021-07-03 23:14:32 4890 5

原创 VS Code插件国际化

使用vscode-nls做VS Code插件的国际化最近项目需要参考VS Code的插件国际化方案,网上的资料比较少,所以研究了一下,算是有点成果,记录一下。VS Code插件的国际化,官方提供了两个工具 vscode-nls 和 vscode-nls-dev ,vscode-nls在源码中引入,对字符串进行翻译,vscode-nls-dev用于提取源码中需要翻译的字符串,生成指定格式的国际化文件。本文参考了官方提供的国际化示例,同样使用gulp自动化构建工具。 个人没有做过VS Code插件开发,所

2021-05-15 17:05:34 1625

原创 Qt滚动条(QScrollBar)圆角样式问题跟踪

Qt使用样式表设置圆角滚动条的黑色背景问题今天在知乎上看到一篇文章,描述使用样式表设置圆角滚动条时,圆角四周会有黑色区域而非透明,文章里最后借用 QSlider 来实现圆角滚动条。 我好奇 Qt 居然会出现这样的Bug,就研究了一下,顺便做个记录。 设置圆角样式:QScrollBar 有一些子控件区域,handle 为滑块, add-line、sub-line 默认是滚动条两侧箭头区域,add-page、sub-page 是滑块两侧区域,使用以下样式表设置圆角,除了滑块与主背景,都设置为透明:

2021-05-07 22:31:50 2376 3

原创 Qt借助隐藏控件和QSS绘制重复元素

使用QStyle绘制借助隐藏控件重复元素在之前两篇文章,QComboBox文字居中 和 使用QSS定制SwitchButton 中,我借助不同的 QStyleOption 来定制复杂控件,目的是为了将 qss 这一 UI 美化机制应用到自绘控件中,尽可能减少在代码中使用接口和变量。本文对此技巧,再提出一种应用,即,使用 QSS 应用到隐藏控件,借助该控件的 QStyleOpen,在其他窗口或图片中绘制出重复元素。具体原理应该跟之前文章一样,没有什么新的东西。可以参考前两篇文章。一、场景当项目

2021-04-22 22:45:04 842 1

原创 Qt实现一个支持QSS的Switch Button(开关按钮)

目录Qt实现一个支持QSS的Switch Button(开关按钮)问题解决思路实现方式其他不同的 Switch Button总结Qt实现一个支持QSS的Switch Button(开关按钮)本文会比较长,目的是为了提供一种实现自定义复杂控件的方式,对于使用 QSS 应用样式的项目可能会有帮助。实现的过程会相对比较复杂和难理解,仅作为研究,对于实际开发可能没什么太大价值。放上最终的实现效果图:问题常见的 Switch Button ,至少包含两部分,槽和滑块,这种由多个小部件组合的控件,在 Q

2020-12-12 15:34:41 4850 3

原创 QComboBox文字居中的一种解决办法

QComboBox文字居中的一种解决办法本文会尽可能解释一些内容,所以会显得有点长。关于QComboBox文字的居中,网上提供的主流方案是,通过 QComboBox::setEditable 设置为可编辑状态,再获取 QComboBox::lineEdit 设置为只读并居中文字。该方案的缺点在于改变了不可编辑状态下QComboBox的交互行为,例如,点击文本区域不会弹出列表,原因是QComboBox的一些交互行为依赖于 editable 属性,虽然可以通过自定义鼠标事件等方式完善,但不同平台上的交互

2020-11-05 01:45:49 5683 4

原创 QML虚拟键盘添加自定义样式

QML自定义虚拟键盘样式Qt Quick自带有个Qt Virtual Keyboard,方便用户集成虚拟键盘,其样式有两种,default和retro。Qt文档里解释可以通过QT_VIRTUALKEYBOARD_STYLE环境变量来设置样式。 文档中也提到如何修改默认样式(点击这里),本文也是针对文档里的方法做个操作解释。下图是Qt自带的两个样式路径:具体操作如下:拷贝其中一个到自己的项目下(比如default),并改个名字,这里修改为darkblue将目录里的qrc文件添加到项目

2020-08-23 01:31:00 2033 4

原创 std::bind在Qt connect中的一个应用

std::bind在Qt信号槽上的一个应用Qt5中允许将信号connect到其他可调用对象上,包括lambda和普通的成员函数等,在某些场景下,会经常使用lambda捕获一些变量,调用某个指定的成员函数,比如:void Widget::processChannel(const QString & name, bool enable); // 需要调用的函数//使用lambdaQString name = "name";connect(action, &QAction::trigge

2020-07-25 15:41:26 2273

原创 win10使用分区工具系统迁移后无法启动记录(UEFI)

最近想更换大一点的固态硬盘,在PE环境,使用分区助手将系统迁移到新的硬盘,换上后无法启动。这种基本就是需要重新配置引导,国内资源互相抄来抄去,就是找不到靠谱的解决办法,最后在这个问题回答里找到了一个方案。此解决方案是需要做个Windows 10启动盘,然后在高级工具里打开命令行工具,使用bcdboot命令新建一个引导。其实分区助手提供了引导修复的功能,内部应该也是使用bcdboot命令,但引导...

2019-08-24 21:04:19 19877

原创 用Qt实现一个动态缩放的滚动条

用Qt实现一个动态缩放的滚动条1. QScrollArea与QScrollBar的关系2. 理解QWidget::sizeHint()3. 布局变化通知部分代码:用Qt实现一个动态缩放的滚动条很早的时候做一个Qt项目,需求是实现一个滚动条动态变粗变细的效果。当时由于对Qt了解不多,就拒绝了。最近忙完工作,突然想起这个需求,花点时间实现了一下,确实不难。以下是实际效果图(使用style sh...

2019-03-29 01:23:57 3477 2

原创 Win10下UWP链接拖放解析接口(Qt)

注:本文仅说明流程,具体的分析涉及太多东西在Win7及以前,解析快捷方式目标程序和参数等信息,可以使用IShellLink。创建对应的COM实例,加载lnk文件,通过GetPath、GetArguments读取。但对于Win10 UWP程序创建的快捷方式,获取不到任何信息。UWP快捷方式(或磁贴,将开始桌面的磁贴拖入到窗口)的解析,需要使用Vista系统之后提供的IShellItem2::...

2018-09-06 00:28:01 898

原创 Win10判断窗口是否是系统计算器

Win10判断窗口是否是系统计算器注:此文只讨论如何判断是否是win10系统默认的UWP计算器假设已经获取到窗口的句柄,如通过GetForegroundWindow(),常见有两种判断方式,通过GetWindowThreadProcessId读取进程相关信息,或者获取窗口标题。对于UWP程序,第一种方式读取到的进程id是Application Frame Host,需要进一步去处理,第二种...

2018-09-03 20:03:43 546

原创 NSIS对高分屏的支持以及解决方案

关于NSIS的相关介绍就不多说自己平时开发会使用到一些高分屏,Windows 10对于高分屏都有默认的推荐缩放。 如果使用NSIS打包软件,安装界面可能因为缩放显得模糊: 微软有一个接口来设置该进程的窗口如何适配DPI :SetProcessDpiAwareness 这个接口有一些使用限制,不过对于NSIS来说,暂时没发现什么问题,该接口只有1个参数,具体可以参考文档:typed...

2018-08-15 00:13:55 1809 1

原创 Win32程序转UWP的开机启动配置(Qt/C++)

Win32程序转UWP的开机启动配置(Qt/C++)对于希望将传统的Windows桌面应用程序转化为UWP应用,微软提供了桌面桥来方便转换。虽然提供了多种形式,但实际都是将二进制的程序包根据配置打包到一个UWP应用里。比如:Desktop App Coverter支持将已有的安装包生成一个UWP程序,实际上是在一个完整的Windows镜像环境里模拟安装该软件,并将安装目录下的文件收集并打包

2018-01-03 19:50:17 1623

原创 Qt中QLabel显示动态图的平滑缩放

解决Qt中QLabel显示动态图的平滑缩放Qt中显示动态图常用QLabel,创建QMovie对象,并通过QLabel::setMovie显示。需要将动态图根据容器缩放时,设置QLabel::setScaledContents。这样做会导致图片细节生硬,不够平滑。解决办法是,重写QLabel::paintEvent方法,读取QLabel::movie,将QMovie::currentPi

2017-11-18 14:11:25 5611

Qt5.4 截图工具

使用Qt5.4写的截图工具 点击截图后,拖动鼠标选择截图区域,截图区域大小可调整 有图片浏览功能,拖动图片到窗口,Ctrl + 滚轮可放大缩小,Ctrl+左或右图片旋转,shift + 右或下,图片翻转

2015-05-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除