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

下面是官方的文档截图

相关推荐
sycmancia18 小时前
Qt——编辑交互功能的实现
开发语言·qt
qq_401700411 天前
Qt 项目中使用 QSS 的全面总结
开发语言·qt
小短腿的代码世界1 天前
信号路由风暴:Qt算法交易系统的高频信号分发架构
qt·算法·架构
郝学胜-神的一滴1 天前
Qt 高级开发 010: 从跨界面传值到自定义信号
开发语言·c++·qt·程序人生·用户界面
Hua-Jay1 天前
OpenCV联合C++/Qt 学习笔记(二十三)----图像校正及单目位姿估计
c++·笔记·qt·opencv·学习·计算机视觉
mirror_zAI1 天前
C++ 仿 QQ 聊天室项目:Qt 客户端 + epoll 服务端 + Reactor 架构(含源码)
c++·qt·架构
Hua-Jay1 天前
OpenCV联合C++/Qt 学习笔记(二十四)----差值法检测移动物体、稠密光流法跟踪移动物体及稀疏光流法跟踪移动物体
c++·笔记·qt·opencv·学习·计算机视觉
我在人间贩卖青春1 天前
重学Qt——对话框和多窗口程序设计
qt
努力努力再努力wz1 天前
【QT入门系列】QWidget 六大常用属性详解:windowOpacity、cursor、font、focus、toolTip 与 styleSheet
android·开发语言·数据结构·c++·qt·mysql·算法
程序leo源2 天前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#