绘图中 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() 相同

下面是官方的文档截图

相关推荐
奇树谦2 天前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构
BroNekoX3 天前
我将基于 QtQuick 框架开发的音乐播放器性能做到顶级
qt
小小晓.3 天前
Qt 对话框、QLineEdit 与布局管理实战详解
开发语言·qt
扶尔魔ocy4 天前
【QT入门到晋级】用开源的自定义控件开发
c++·qt·自定义控件
lhbweilai4 天前
QT项目(串口助手)
开发语言·qt
小鱼仙官5 天前
Qt 主界面弹出分界面
开发语言·qt
誰能久伴不乏5 天前
用 UDP 做一条“可靠“的控制通道
c++·qt·网络协议·udp
Bczheng15 天前
VS2022 安装MFC和QT
c++·qt·mfc
会编程的小孩5 天前
8.19号函数
qt
蓝祁子yoky6 天前
Qt学习日记 Day15:网络编程(二)- UDP基础
网络·qt·学习