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的所有属性.
随机推荐
- Spring Cloud 支付宝支付的流程
沙箱环境又称沙盘,为了开发与调试所提供的环境,它与生产环境互相隔离,但具有生产环境几乎完全相同的功能蚂蚁金服开放平台——开发者中心1.https://openhome.alipay.com2.提供的调 ...
- opencv+python+dlib人脸关键点检测、实时检测
安装的是anaconde3.python3.7.3,3.7环境安装dlib太麻烦, 在anaconde3中新建环境python3.6.8, 在3.6环境下安装dlib-19.6.1-cp36-cp36 ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 指针
每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址. #include <iostream> using namesp ...
- PHP实现简单的双色球机选号码
<?php header('Content-Type: text/html; charset=utf-8'); //PHP实现双色球机选号码 $red = range(1, 33);//初次设定 ...
- jq监听
$(window).resize(function () {//风电月表格自适应高度 var handHeight =$(".tree-handler").height() $(& ...
- 虚拟机vmware vmnet8 未识别(转)
原文链接:https://blog.csdn.net/windows_q/article/details/50678646
- su鉴定故障 普通用户无法切换回root用户处理-centos7网卡速率设置
1.1 检查/etc目录下passwd的权限[root@dev /]# ll/etc/passwd-rw-r--r--. 1 root root 1975 5月 27 06:04/etc/passw ...
- 使用openssl做CA服务器,并且生成证书。
[root@22 conf.d]# openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096 #ca私钥 [root@22 conf.d]# op ...
- 设置Apache(httpd)和Nginx 开机自启动
方法1: 进入目录: vi /etc/rc.d/rc.local #设置apache 和 nginx 开机自启动/usr/sbin/apachectl start/usr/sbin/nginx s ...
- 算法设计和分析(Prim算法构建最小生成树)
问题: 给定无向图G(N,M)表明图G有N个顶点,M条边,通过Prim算法构造一个最小生成树 分析: 算法流程: 构造好的最小生成树就是step6 运行代码: #include<cstdio&g ...