Qt技术总结
文章平均质量分 79
KumaNPC
这个作者很懒,什么都没留下…
展开
-
使用QGraphicsView思想做一个简单图片查看器
如果要做一个图片查看器,支持放大、滚动操作,比较直接的方法是,使用QWidget来显示完整图片,将QWidget放入QScrollArea。缩放时调整QWidget的尺寸,QScrollArea会自动调整滚动范围,超出视口区域图片自然就不会显示。如果要使用QGraphicsView的思想呢?原创 2024-08-19 16:49:58 · 1257 阅读 · 7 评论 -
QLabel文字两端对齐解决方案
使用QProxyStyle + Qt::TextJustificationForced实现QLabel文字两端对齐原创 2024-01-08 23:01:58 · 1424 阅读 · 0 评论 -
一个Qt鼠标透传场景与事件过滤器的用法
Qt使用事件过滤器解决鼠标透传与QScrollArea的冲突场景原创 2023-09-12 23:33:00 · 926 阅读 · 0 评论 -
Qt QWidget 独立窗口抗锯齿圆角的一个实现方案(支持子控件)
针对QWidget有子控件的窗口,实现抗锯齿的圆角裁剪原创 2023-04-24 10:32:41 · 1696 阅读 · 1 评论 -
关于Qt高频率信号槽合并的误解和方案
Qt开发过程中,面对高频率的信号触发,开发者会希望将信号合并。本文由简入难提出几个方案,尝试解决不同的应用场景。原创 2022-07-08 00:59:43 · 1226 阅读 · 4 评论 -
Qt信号槽与事件循环的关系
本文通过几个例子来研究Qt信号槽与事件循环的关系,帮助初学者遇到信号槽无法正确触发时快速定位问题。原创 2022-06-18 17:57:36 · 2479 阅读 · 1 评论 -
Windows平台Qt无边款窗口技术细节
Windows平台Qt无边框保留系统移动、缩放特效的设计细节,并提供Win11最大化按钮弹出snap layout的设计方案。原创 2022-05-15 02:15:07 · 3343 阅读 · 9 评论 -
Qt中QLabel显示动态图的平滑缩放
解决Qt中QLabel显示动态图的平滑缩放Qt中显示动态图常用QLabel,创建QMovie对象,并通过QLabel::setMovie显示。需要将动态图根据容器缩放时,设置QLabel::setScaledContents。这样做会导致图片细节生硬,不够平滑。解决办法是,重写QLabel::paintEvent方法,读取QLabel::movie,将QMovie::currentPi原创 2017-11-18 14:11:25 · 5784 阅读 · 0 评论 -
Qt使用私有接口绘制窗口阴影
Qt使用私有接口绘制窗口阴影大多数软件UI设计都喜欢给控件增加阴影来制造分层效果,而比较好的阴影通常需要算法生成。在Qt中主要有两个方法来实现:QGraphicsDropShadowEffect该方法在指定QWidget下方生成阴影效果,可以设置颜色、偏移、阴影半径。该方法原理是先截取指定QWidget的渲染图像,对图像缩放、填充、模糊,绘制到下面的图层,效果很好。但有个非常大的缺点,由于需要考虑阴影图层的绘制,可能会影响整个窗口的渲染,一些状态不能及时刷新。而且,当阴影区域比较大时,效率非常低。原创 2022-04-12 01:16:44 · 1389 阅读 · 2 评论 -
Qt列表下方增加弹出加载数据提示效果
使用QScrollEvent在Qt列表下方弹出需求最近有个需求是在列表下方增加一个“加载更多数据”的提示,当后台在请求数据的时候提示用户。在我的这篇 QScroller的QScrollerProperties参数研究 文章中,研究了一下鼠标手势的列表滚动参数,里面提到了过量滚动的一些设置,可以借用这个效果来实现。以下是最终效果,为了方便测试,当滚动条处于最底端,并继续尝试滚动时,弹出该提示:方案研究了一下QScroller的源码,发现是通过向目标窗口发送 QScrollEvent 实现滚动和过量原创 2021-11-03 22:40:52 · 745 阅读 · 0 评论 -
Qt Bug: MacOS平台非激活窗口右键菜单导致输入框光标不显示
MacOS平台上右键菜单导致输入框光标不显示问题很好复现,在桌面点击,使窗口处于非激活状态,此时输入框光标消失。直接在窗口上右键,弹出右键菜单后选择一个,菜单关闭,可以看到输入框没有了闪烁的光标,以下是Qt5.9.9测试结果:解决办法没有具体研究是什么导致了该问题,通过日志输出可以发现,光标消失后,QApplication::activeWindow返回空。所以尝试手动调用QApplication::setActiveWindow重设一下。考虑到目前没有其他复现的过程,所以通过全局拦截QEvent原创 2021-08-05 22:40:55 · 495 阅读 · 0 评论 -
QScroller的QScrollerProperties参数研究
使用QScroller拖拽效果的参数研究过QScrollerProperties通过丰富的参数实现拖拽的很多动画细节,本文以鼠标手势为测试,做个简单整理。以下是目前的所有属性:QScrollerProperties::MousePressEventDelay设置一个鼠标事件延迟时间,单位s。当鼠标按下后,开始手势识别,如果在该时间内开始了拖拽手势,窗口不会收到鼠标事件。如下动图,当鼠标开始点击后,1秒后,列表响应了按下事件:QScrollerProperties::DragStart原创 2021-07-24 16:43:56 · 2755 阅读 · 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 · 811 阅读 · 1 评论 -
QTableView使用QTextDocument绘制Html的缩略支持
QTableView使用QTextDocument绘制单行Html的文本缩略支持如果要在QTableView的单元格支持Html,通常做法是使用QTextDocument绘制,由于带有标签的Html文本总是长于实际显示的文本,所以无法直接使用QFontMetrics::elidedText。如果对纯文本进行缩略,又不好判断对应Html是哪部分被替换了。实际上,QTextDocument支持文本编辑,Html文本会被转化为Qt的格式,因此,使用坐标去测试文本是否超出显示区域,再进行替换,可实现不同的缩略原创 2021-07-04 14:55:08 · 1271 阅读 · 1 评论 -
Qt借助隐藏控件和QSS绘制重复元素
使用QStyle绘制借助隐藏控件重复元素在之前两篇文章,QComboBox文字居中 和 使用QSS定制SwitchButton 中,我借助不同的 QStyleOption 来定制复杂控件,目的是为了将 qss 这一 UI 美化机制应用到自绘控件中,尽可能减少在代码中使用接口和变量。本文对此技巧,再提出一种应用,即,使用 QSS 应用到隐藏控件,借助该控件的 QStyleOpen,在其他窗口或图片中绘制出重复元素。具体原理应该跟之前文章一样,没有什么新的东西。可以参考前两篇文章。一、场景当项目原创 2021-04-22 22:45:04 · 921 阅读 · 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 · 5567 阅读 · 3 评论 -
QComboBox文字居中的一种解决办法
QComboBox文字居中的一种解决办法本文会尽可能解释一些内容,所以会显得有点长。关于QComboBox文字的居中,网上提供的主流方案是,通过 QComboBox::setEditable 设置为可编辑状态,再获取 QComboBox::lineEdit 设置为只读并居中文字。该方案的缺点在于改变了不可编辑状态下QComboBox的交互行为,例如,点击文本区域不会弹出列表,原因是QComboBox的一些交互行为依赖于 editable 属性,虽然可以通过自定义鼠标事件等方式完善,但不同平台上的交互原创 2020-11-05 01:45:49 · 6015 阅读 · 4 评论 -
QML虚拟键盘添加自定义样式
QML自定义虚拟键盘样式Qt Quick自带有个Qt Virtual Keyboard,方便用户集成虚拟键盘,其样式有两种,default和retro。Qt文档里解释可以通过QT_VIRTUALKEYBOARD_STYLE环境变量来设置样式。 文档中也提到如何修改默认样式(点击这里),本文也是针对文档里的方法做个操作解释。下图是Qt自带的两个样式路径:具体操作如下:拷贝其中一个到自己的项目下(比如default),并改个名字,这里修改为darkblue将目录里的qrc文件添加到项目原创 2020-08-23 01:31:00 · 2255 阅读 · 4 评论 -
用Qt实现一个动态缩放的滚动条
用Qt实现一个动态缩放的滚动条1. QScrollArea与QScrollBar的关系2. 理解QWidget::sizeHint()3. 布局变化通知部分代码:用Qt实现一个动态缩放的滚动条很早的时候做一个Qt项目,需求是实现一个滚动条动态变粗变细的效果。当时由于对Qt了解不多,就拒绝了。最近忙完工作,突然想起这个需求,花点时间实现了一下,确实不难。以下是实际效果图(使用style sh...原创 2019-03-29 01:23:57 · 3641 阅读 · 2 评论