Qt QRect与QRectF的区别
一直在与QRect和QRectF打交道。
甚至在使用过程中因为QRect而出现了致命的Bug。
因为QRect在数据存储表示上有一个很大的“历史遗留问题”!
QRect Class

对比QRectF就很清晰了.

例子
拿一个例子来对比,假设有一个矩形左上角为(0, 0),长宽都为100.那么我们期待的一个矩形的左上角和右下角应该是(0, 0)(100, 100)。
但,如果用构造函数QRect(0, 0, 100, 100)会得到:
- 左上角(0, 0)
- 右下角(0, 99)
而对于构造函数QRectF(0, 0, 100, 100)会得到:
- 左上角(0.0, 0.0)
- 右下角(0.0, 100.0)
但是,这里的QRect和QRectF在实际绘制过程中会重叠,也就是说他们实际上是一样的。
所以文档才建议,或者你可以使用QRectF,否则就要把这个陷阱铭记于心。
同时构造QRect的时候,建议使用。
- QRect(int x, int y, int width, int height)
同时在代码中避免使用QRect的: - right()
- bottom()
相关函数。
或者,将错就错,在构造时候使用了TopLeft和BottomRight,那么就记得要+1或者-1,或者在后续使用过程中对获得的Width或者Height进行+/-1。
注意
请注意使用如下两个构造函数构造同一个矩形的差异。
- QRect(QPoint topLeft, QPoint bottomRight)
- QRect(int x, int y, int width, int height)
Qt QRect与QRectF的区别的更多相关文章
- QT、QTE、qtopia区别
QT.QTE.qtopia区别 Qt的授权是分为两条线,商业版和开源版.如果使用商业版的Qt,那么开发出的程序可以是私有的和商业的:如果使用的是开源版的Qt,由于其使用的是GPL协议,那么可发出的程序 ...
- Qt 的两个许可证区别分析:LGPL 和商业协议
Qt 的两个许可证区别分析:LGPL 和商业协议 Qt 有两个许可证:LGPL 和商业协议.这两个协议在现在的 Qt 版本中的代码是完全一致的(潜在含义是,Qt 的早期版本,商业版的 Qt 通常包含有 ...
- QT,QT/E,Qtopia,qt creator的联系与区别
关于qt,qte,qtopia,qt creator它们之间的区别和联系,相信对所有刚刚入门qt的同学来说都是很模糊的.我在刚开始接触qt的时候也是这样,而且我第一次接触的是qte,因为要在arm上开 ...
- Linux那些事——GTK+, Qt, Gnome, KDE, xWindow, xOrg区别
Linux那些事--GTK+, Qt, Gnome, KDE, xWindow, xOrg区别 Linux不仅内核开源,系统配置也是高度可定制化的,其中就包括我们所熟知的图形界面,从桌面环境,主题,字 ...
- QT update和repaint的区别
void QWidget::repaint ( int x, int y, int w, int h, bool erase = TRUE ) [槽] 通过立即调用paintEvent()来直接重新绘 ...
- Qt事件和信号的区别 .
仔细来看,事件与信号其实并无多大差别,从我们对其需求上来说,都只要能注册事件或信号响应函数,在事件或信号产生时能够被通知到即可.但有一项区别在于,事件处理函数的返回值是有意义的,我们要根据这个返回值来 ...
- Qt Quick Controls 与 Qt Quick Controls 2的区别(详细对照)
Qt Quick Controls 原本是为支持桌面平台而开发的,后来又加入了移动平台和嵌入式平台的支持.它们应用非常广泛,因为它们提供了足够灵活的样式系统,以允许开发具有平台相关或者无关风格的应用程 ...
- Qt/Qte/Qtopia三者的区别
Qt泛指 Qt software的所有版本的图像界面库,包括 Qt/X11(Unix/Linux),Qt Windows, Qt Mac 等,但这只是相对于二进制来说的.Qt作为一个跨平台的GUI 框 ...
- qt——QObject 与 QWidget 的区别
QObject是QT中所有类的基类,QWidget是所有UI Widget类的基类,所以QObject是QWidget的基类,从QWidget继承也就表示继承了QObject的所有属性.
随机推荐
- echarts 柱状图的选中模式实现-被选中变色和再次选中为取消变色
方法: function barCharShow(curr_dim,divId,result_data){ mutilDim(curr_dim);//维度信息 var paint = initEcha ...
- GS 原理及破解 《0day安全》
1.原理: 在main函数之前,会调用__security_init_cookie函数(win10,vs2017,release,x86): 进入__security_init_cookie函数内部: ...
- iOS 技术篇:从使用到了解block底层原理 (二)
block实质 序言 上篇文章中主要通过简单的demo展示了block的使用场景,本篇将基于上篇文章iOS 技术篇:从使用到了解block底层原理 (一)进一步了解block底层的实现原理. bloc ...
- 每天一点点之vue框架开发 - 如何在一个页面调用另一个同级页面的方法
使用场景: 页面分为header.home.footer三部分,需要在home中调用header中的方法,这两个没有相互引入 官方给出方法: api传送门 在项目中实现: 1.首先同一个vue实例来调 ...
- MFC双缓冲
大家都知道包括windows桌面在内我们看到的一切都是系统画上去的,windows桌面就相当于一个黑板: <1>普通绘图就是直接在我们看得到的黑板上绘图 <2>双缓冲就是先在一 ...
- Day2-T2
原题目 Describe:贪心,保证至少一条路牛的数量最多 code: #include<bits/stdc++.h> using namespace std; long long n,m ...
- C++编程学习(二) 数据
博主已经有一些基础了,所以写的东西可能是容易错的,或者以前没记住的,或者是对理解知识点有帮助的.因此如果有纯小白看到了这篇博文,不懂的地方请自行百度啦~ 另外,本系列所有内容的图片均来自于西北工业大学 ...
- errors exist in required project(s) xxx proceed with launch?
原因:本地更新文件和SVN有冲突..找到报错的文件.和SVN资源库的文件对比,修改即可. 一定要解决所有的冲突啊.更新的时候一定要注意有冲突的文件.不然项目无法启动. ---------------- ...
- 关于GAN的一些笔记
目录 1 Divergence 1.1 Kullback–Leibler divergence 1.2 Jensen–Shannon divergence 1.3 Wasserstein distan ...
- 深入理解C指针<一>
指针和内存 C程序在编译后,会以三种形式使用内存: 静态.全局内存:静态变量和全局变量使用这部分内存,生存周期为整个程序运行时,全局变量所有函数都可以访问,但静态变量虽然生存周期为整个程序运行时,但作 ...