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

下面是官方的文档截图

相关推荐
rit843249921 小时前
基于Qt的串口上位机控制蓝牙小车程序
开发语言·qt
luoyayun36121 小时前
Qt/QML 音频频谱图与频谱瀑布图实现:从 PCM 到频域可视化
qt·音视频·频谱图·频谱瀑布图
爱吃生蚝的于勒21 小时前
QT开发第三章——常用控件
linux·服务器·开发语言·前端·javascript·c++·qt
Shadow(⊙o⊙)1 天前
QT常用控件1.0,enabled() geometry() QIcon的.qrc文件导入
开发语言·c++·qt
小短腿的代码世界1 天前
高性能订单路由与智能拆单算法:Qt在量化交易系统中的核心架构——毫秒级延迟下如何隐藏你的交易意图?
开发语言·qt·架构
油炸自行车1 天前
【bug】Qt 6 Q_NAMESPACE 跨 DLL 链接错误:LNK2019 无法解析 staticMetaObject
数据库·c++·qt·bug·link2019·q_namespace_exp·namespaceexport
Dovis(誓平步青云)1 天前
《QT学习第五篇:QSS美化界面与API绘图》
开发语言·数据库·qt·学习·时序数据库·开源智能体
ChindongX1 天前
笔记:解决窗口透明度不生效问题 —— QGraphicsOpacityEffect 的使用
笔记·qt
Shadow(⊙o⊙)1 天前
QT常用控件3.0,font字体设置,toolTip提示,focusPolicy焦点定位原则,中型控件StyleSheet样式表。
服务器·开发语言·前端·c++·qt
Shadow(⊙o⊙)1 天前
QT常用控件2.0,windowOpacity窗口透明度,Cursor光标设置
开发语言·c++·qt