
Qt
文章平均质量分 75
KumaNPC
这个作者很懒,什么都没留下…
展开
-
使用QGraphicsView思想做一个简单图片查看器
如果要做一个图片查看器,支持放大、滚动操作,比较直接的方法是,使用QWidget来显示完整图片,将QWidget放入QScrollArea。缩放时调整QWidget的尺寸,QScrollArea会自动调整滚动范围,超出视口区域图片自然就不会显示。如果要使用QGraphicsView的思想呢?原创 2024-08-19 16:49:58 · 1743 阅读 · 7 评论 -
QWidget窗口抗锯齿圆角的一个实现方案(支持子控件裁剪)2
本方案使用了QGraphicsEffect,由于QGraphicsEffect对一些控件会有渲染问题,比如列表、表格等,所以暂时仅作为研究,优先其他方案在之前的文章中(),对于独立弹窗的抗锯齿圆角,使用一层遮罩来实现对窗口内容的裁切。在很早之前还考虑过另外一种方案,既然QGraphicsEffect能够对控件进行一些特效处理,那自定义QGraphicsEffect也应该可以做到对内容裁剪。原创 2024-07-07 13:10:21 · 723 阅读 · 1 评论 -
一个Qt鼠标透传场景与事件过滤器的用法
Qt使用事件过滤器解决鼠标透传与QScrollArea的冲突场景原创 2023-09-12 23:33:00 · 1073 阅读 · 0 评论 -
Qt实现一个简单的放射式弹出菜单
使用Qt QWidget实现一个简单的放射式弹出菜单,支持简单的动画和拖拽。可设置弹出角度和范围,可设置动画时间等原创 2023-08-30 22:41:14 · 553 阅读 · 1 评论 -
Qt QWidget 独立窗口抗锯齿圆角的一个实现方案(支持子控件)
针对QWidget有子控件的窗口,实现抗锯齿的圆角裁剪原创 2023-04-24 10:32:41 · 2057 阅读 · 1 评论 -
Windows平台鼠标按下标题栏的阻塞问题研究(使用Qt框架)
在Windows标题栏按下鼠标左键、右键时,会出现窗口阻塞问题,包括窗口停止绘制、定时器触发等。本文使用Qt测试并尝试提出自己的解决方案,因为是Windows本身缺陷,需要通过Windows消息解决。原创 2022-10-29 23:40:21 · 2230 阅读 · 2 评论 -
Qt绘制椭圆曲线的角度问题(离心角和旋转角)
使用Qt绘制椭圆曲线,由于旋转角与离心角的差异,导致达不到绘制期望。本文尝试提供转换的方法,方便计算离心角。原创 2022-08-09 21:37:23 · 2606 阅读 · 6 评论 -
个人实现的可任意折叠QToolBox——AdvancedToolBox
自己实现的AdvanceToolBox,增强QToolBox功能。支持使用样式表设置标题样式,支持动态折叠展开、调整高度、自动布局。目前仅支持垂直布局。原创 2022-07-27 11:48:38 · 3825 阅读 · 3 评论 -
关于Qt高频率信号槽合并的误解和方案
Qt开发过程中,面对高频率的信号触发,开发者会希望将信号合并。本文由简入难提出几个方案,尝试解决不同的应用场景。原创 2022-07-08 00:59:43 · 1481 阅读 · 4 评论 -
Qt信号槽与事件循环的关系
本文通过几个例子来研究Qt信号槽与事件循环的关系,帮助初学者遇到信号槽无法正确触发时快速定位问题。原创 2022-06-18 17:57:36 · 2817 阅读 · 1 评论 -
Windows平台Qt无边款窗口技术细节
Windows平台Qt无边框保留系统移动、缩放特效的设计细节,并提供Win11最大化按钮弹出snap layout的设计方案。原创 2022-05-15 02:15:07 · 3893 阅读 · 9 评论 -
Qt中QLabel显示动态图的平滑缩放
解决Qt中QLabel显示动态图的平滑缩放Qt中显示动态图常用QLabel,创建QMovie对象,并通过QLabel::setMovie显示。需要将动态图根据容器缩放时,设置QLabel::setScaledContents。这样做会导致图片细节生硬,不够平滑。解决办法是,重写QLabel::paintEvent方法,读取QLabel::movie,将QMovie::currentPi原创 2017-11-18 14:11:25 · 5961 阅读 · 0 评论 -
Qt使用私有接口绘制窗口阴影
Qt使用私有接口绘制窗口阴影大多数软件UI设计都喜欢给控件增加阴影来制造分层效果,而比较好的阴影通常需要算法生成。在Qt中主要有两个方法来实现:QGraphicsDropShadowEffect该方法在指定QWidget下方生成阴影效果,可以设置颜色、偏移、阴影半径。该方法原理是先截取指定QWidget的渲染图像,对图像缩放、填充、模糊,绘制到下面的图层,效果很好。但有个非常大的缺点,由于需要考虑阴影图层的绘制,可能会影响整个窗口的渲染,一些状态不能及时刷新。而且,当阴影区域比较大时,效率非常低。原创 2022-04-12 01:16:44 · 1578 阅读 · 2 评论 -
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 · 458 阅读 · 0 评论 -
Qt列表下方增加弹出加载数据提示效果
使用QScrollEvent在Qt列表下方弹出需求最近有个需求是在列表下方增加一个“加载更多数据”的提示,当后台在请求数据的时候提示用户。在我的这篇 QScroller的QScrollerProperties参数研究 文章中,研究了一下鼠标手势的列表滚动参数,里面提到了过量滚动的一些设置,可以借用这个效果来实现。以下是最终效果,为了方便测试,当滚动条处于最底端,并继续尝试滚动时,弹出该提示:方案研究了一下QScroller的源码,发现是通过向目标窗口发送 QScrollEvent 实现滚动和过量原创 2021-11-03 22:40:52 · 836 阅读 · 0 评论 -
Qt Bug: MacOS平台非激活窗口右键菜单导致输入框光标不显示
MacOS平台上右键菜单导致输入框光标不显示问题很好复现,在桌面点击,使窗口处于非激活状态,此时输入框光标消失。直接在窗口上右键,弹出右键菜单后选择一个,菜单关闭,可以看到输入框没有了闪烁的光标,以下是Qt5.9.9测试结果:解决办法没有具体研究是什么导致了该问题,通过日志输出可以发现,光标消失后,QApplication::activeWindow返回空。所以尝试手动调用QApplication::setActiveWindow重设一下。考虑到目前没有其他复现的过程,所以通过全局拦截QEvent原创 2021-08-05 22:40:55 · 552 阅读 · 0 评论 -
QScroller的QScrollerProperties参数研究
使用QScroller拖拽效果的参数研究过QScrollerProperties通过丰富的参数实现拖拽的很多动画细节,本文以鼠标手势为测试,做个简单整理。以下是目前的所有属性:QScrollerProperties::MousePressEventDelay设置一个鼠标事件延迟时间,单位s。当鼠标按下后,开始手势识别,如果在该时间内开始了拖拽手势,窗口不会收到鼠标事件。如下动图,当鼠标开始点击后,1秒后,列表响应了按下事件:QScrollerProperties::DragStart原创 2021-07-24 16:43:56 · 3107 阅读 · 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 · 888 阅读 · 1 评论 -
QTableView使用QTextDocument绘制Html的缩略支持
QTableView使用QTextDocument绘制单行Html的文本缩略支持如果要在QTableView的单元格支持Html,通常做法是使用QTextDocument绘制,由于带有标签的Html文本总是长于实际显示的文本,所以无法直接使用QFontMetrics::elidedText。如果对纯文本进行缩略,又不好判断对应Html是哪部分被替换了。实际上,QTextDocument支持文本编辑,Html文本会被转化为Qt的格式,因此,使用坐标去测试文本是否超出显示区域,再进行替换,可实现不同的缩略原创 2021-07-04 14:55:08 · 1409 阅读 · 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 · 7361 阅读 · 6 评论 -
Qt借助隐藏控件和QSS绘制重复元素
使用QStyle绘制借助隐藏控件重复元素在之前两篇文章,QComboBox文字居中 和 使用QSS定制SwitchButton 中,我借助不同的 QStyleOption 来定制复杂控件,目的是为了将 qss 这一 UI 美化机制应用到自绘控件中,尽可能减少在代码中使用接口和变量。本文对此技巧,再提出一种应用,即,使用 QSS 应用到隐藏控件,借助该控件的 QStyleOpen,在其他窗口或图片中绘制出重复元素。具体原理应该跟之前文章一样,没有什么新的东西。可以参考前两篇文章。一、场景当项目原创 2021-04-22 22:45:04 · 1115 阅读 · 1 评论