Qt中QRect和CRect的比較

2022-09-04 19:57:08 字數 1965 閱讀 3979

本文介紹qtqrectwindows下的crect的比較。

qrect的無參構造方法是這樣的:

qrect(): x1(0),y1(0),x2(-1),y2(-1)
預設構造的x2和y2為-1,而crect的無參構造這兩個數值為0。

帶4個整形引數未知的構造方法是這樣的:

qrect(int aleft, int atop, int awidth, int aheight)

crect的四個整形引數構造方法是這樣的:

crect::crect(int l, int t, int r, int b)

注意第三個引數是寬度,第四個是高度,而crect的4個整形引數,後兩個是rightbottom,內在

因為qrect在設定寬度時,x2的座標有-1操作,要獲得構造時的寬度,就通過x2 - x1 + 1,這樣的方法來獲得,這也是qrect::width()的內部實現。

crect的寬度width直接等於right - left。在crect中,經常是這樣設定寬度的,

const int nwidth = 15;

crect rt;

rt.left = 10;

rt.right = rt.left + nwidth;

這樣設定目標寬度和設定是要一致的。如果上述做法遷移到qrect上,就會有偏大。

const int nwidth = 15;

qrect rt;

rt.setleft(10);

rt.setright(rt.left() + nwidth);

這樣設定,rt的寬度實際上是16,而不是期望的15.如果需要正確的設定,則需要這樣:

const int nwidth = 15;

qrect rt;

rt.setleft(10);

rt.setwidth(nwidth);

呼叫setwidth來設定寬度,可使得結果與預期一致。qrect的高度設定也是一樣,建議用setheight來設定高度.

另一點注意,qrect::setwidthqrect::setheight是通過更改x2y2來改變寬高,左上角座標是不會改變的。以下的做法是不能達到目的的:

// 先設定右邊距,再設定寬度,這樣不會使得left邊界位於10這裡

qrect rt;

rt.setright(20);

rt.setwidth(10);

moveleft是移動整個矩形,使之位於指定左邊距。

setleft是移動左邊距,不會改變右邊距。

獲得右邊距:建議使用 x() + width(),而不是 right()。right()會比實際位置少1個單位。

獲得下邊距:建議使用 y() + height(),而不是 bottom()。

qrect類建議只使用left(),top(),width()和height()這些成員函式,不要用right()bottom()函式。

qt 學習之路 :座標系統

qrect的使用 qt 使用Qt介面以及邏輯實現

用過qt的朋友 特別是qtcreator的習慣在介面ui上面對應的cpp中寫 但是在pyqt中不是這樣的。pyqt只是個介面,只會生成介面即ui,就算是乙個按鈕也需要在python只自己寫。不會想當然的找槽函式自動生成那麼簡單了。安裝pyqt5 pip3 install pyqt 安裝設計器 pip...

CRect和HRGN的區別

crect 就是乙個普通的資料結構 類?hrgn是資源控制代碼 由作業系統管理,數量有限 1 構造出異形hrgn 這個hrgn必須有效,並且不為空 2 setwindowrgn crect顧名思義,只是個矩形 hrgn是區域,有各種api函式可以建立任意形狀的區域 建立區域後,使用setwindow...

VC中CRect類的簡單介紹

crect crect類與windows rect結構相似,並且還包括操作crect物件和windows rect結構的成員函式。在傳遞lprect,lpcrect或rect結構作為引數的任何地方,都可以傳遞crect物件來代替。注意 這個類是從tagrect結構派生而來的。tagrect是rect...