绘图中 QRect 与 QRectF 的不同

绘图中 QRect 与 QRectF 的不同

起因

最近在使用 QRadialGradient 绘制图片时,将 QRect::center() 作为参数传给了 QRadialGradient ,但是当程序运行时,我发现图案中心往左上偏移了一点点,如图所示:

代码演示:

c++ 复制代码
QRect rect(0, 0, 20, 20);
QRadialGradient radialGradient(rect.center(), 20 / 2);
radialGradient.setColorAt(0, Qt::white);
radialGradient.setColorAt(0.5, Qt::white);
radialGradient.setColorAt(0.6, Qt::gray);
radialGradient.setColorAt(1.0, Qt::gray);

于是便有了这篇简单的思考

解决方案

将 QRect 换成 QRectF 就可以解决

代码演示:

c++ 复制代码
QRectF rect(0, 0, 20, 20);
QRadialGradient radialGradient(rect.center(), 20 / 2);
radialGradient.setColorAt(0, Qt::white);
radialGradient.setColorAt(0.5, Qt::white);
radialGradient.setColorAt(0.6, Qt::gray);
radialGradient.setColorAt(1.0, Qt::gray);

此时你可以看到你想要的图案了

这里是我粗心大意了,其实,仔细看看官方文档,会发现,文档中其实有如下定义的:

解释

QRect 是整型版本,QRectF 是精度更高的浮点型版本

对于 QRect,由于历史原因,bottom()和 right()函数返回的值并不是真正的矩形的右下角,right()返回的值与 left()+width()-1 相同,bottom()返回的值与 top()+height()-1 相同,同理

对于 QRectF, right()返回的值与 left()+width() 相同,bottom()返回的值与 top()+height() 相同

下面是官方的文档截图

相关推荐
木千5 小时前
Qt全屏显示,在顶部工具栏的最右边显示关闭按钮
开发语言·qt
誰能久伴不乏6 小时前
Qt 线程为什么和 Linux pthread 不一样?事件循环、QObject 线程归属与串口上位机正确架构
linux·qt·架构
少控科技6 小时前
QT新手日记025 - W002程序代码
开发语言·qt
C++ 老炮儿的技术栈6 小时前
Qt中自定义 QmyBattery 电池组件开发
c语言·开发语言·c++·windows·qt·idea·visual studio
少控科技9 小时前
QT新手日记 029 - QT所有模块
开发语言·qt
少控科技1 天前
QT高阶日记01
开发语言·qt
木千1 天前
Qt全屏显示时自定义任务栏
开发语言·qt
习惯就好zz1 天前
[实战笔记] 从 Qt 5.12.9 跨越到 Qt 6.x 完美迁移指南 (Windows + VS)
windows·qt·msvc·qt5·qt6·迁移
余衫马1 天前
在Win10下编译 Poppler
c++·windows·qt·pdf·poppler