警惕QRect top 函式,以及QSize

2021-10-02 21:21:39 字數 2656 閱讀 6437

目錄

正常的情形(height > 0)

「反常的」情形(height < 0)

在前面的部落格《自己對qlinef::angle()的理解 》裡,我提到了qwidget的y軸指向向下。這樣的情況同樣發生在qrect等幾何形狀上。qrect::top()的字面意思是矩形上沿的縱座標。我們往往會認為其返回值等於矩形四個頂點裡縱座標最大的那個值。然而,由於qt對y方向的規定,當qrect::height()為正時,top返回的其實是較小的值。所謂的「正常情形」,指的是height > 0. qpolygon::boundingrect()函式返回的就是這種正常的矩形。來看下面的例子:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include #include mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(new ui::mainwindow)

mainwindow::~mainwindow()

void mainwindow::on_pushbutton_clicked()

效果:

對於由(0,0), (0,1), (1,0), (1,1)圍成的矩形,top = 0

對於由(0,-1), (0,1), (1,-1), (1,1)圍成的矩形,top = -1

可見,top返回的是y方向較小的點的縱座標。

沿著這個思路走下去,考慮如何運用qrect的建構函式。qrect有多種建構函式,其中一種的語法是這樣的

qrect(qpoint, qsize())
qsize::height 的含義值得注意。當height為正時,說明qrect::bottom > qrect:top

來看下面的**:

可見,當height為正時,說明qrect::bottom > qrect:top

另外,有人注意到bottom == 9, height == 9而不是10.qt的文件對此給出了解釋:

returns the y-coordinate of the rectangle's bottom edge.

note that for historical reasons this function returns top() + height() - 1; use y() + height() to retrieve the true y-coordinate.

根據qt的文件,setheight()函式除了更新height()之外,還會更新bottom()。但是top()是不會被更新的。同樣,setbottom()函式只會引起bottom和height的變化,不會更新top。

總的來說,只要不呼叫settop,setleft, settopleft, topleft的位置是不變的。

看下面的**:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(new ui::mainwindow)

mainwindow::~mainwindow()

void mainwindow::on_pushbutton_clicked()

向spinbox輸入數值,然後計算矩形的6個屬性,並在底下的文字框中列印:

再看下面的**:

總之,只要不呼叫settop,setleft, settopleft, topleft的位置是不變的。

建構函式以及this

實際上建構函式與普通的函式並沒有區別,所以一般在開發中會使用大駝峰命名規則來區別普通的函式,建構函式實際上是通過返回乙個this值來完成建構函式的建立的.這個rutern this的操作由new這個操作符來完成,當然個人也可以手動來設定return的返回值,手動設定的返回值會覆蓋由new所自動新增的...

建構函式以及this

實際上建構函式與普通的函式並沒有區別,所以一般在開發中會使用大駝峰命名規則來區別普通的函式,建構函式實際上是通過返回乙個this值來完成建構函式的建立的.這個rutern this的操作由new這個操作符來完成,當然個人也可以手動來設定return的返回值,手動設定的返回值會覆蓋由new所自動新增的...

php fopen函式以及相關函式

fopen string filename string mode bool use include path false resource context fopen 將 filename 指定的名字資源繫結到乙個流上。引數 filename 如果 php 認為 filename 指定的是乙個本地...