背景:最近在推進先進軟體開發技術大作業的過程中,需要在qt的某個控制項(widget)中繪製乙個2d圖形,該widget位於tabwidget的某乙個tab內,如圖所示。
在qt的子控制項widget中利用qpaint類繪製圖形,需要定義乙個新的類,該類繼承自qwidget,並且需要在這個新的類中重寫paintevent()方法。自定義類的標頭檔案和cpp檔案如下:
#ifndef drawprogressbar_h#define drawprogressbar_h#include
"qwidget.h
"class drawprogressbar : public
qwidget
;#endif
//!drawgrogressbar_h
#include "問題:在程式中呼叫類中paintevent()方法時問題出現了——其繪製的圖形只能出現在子控制項左上角 50 x 300 的位置上。drawprogressbar.h
"#include
"qwidget.h
"#include
"qpainter.h
"drawprogressbar::drawprogressbar(qwidget *parent) : qwidget(parent)
void drawprogressbar::paintevent(qpaintevent *event
)drawprogressbar::~drawprogressbar()
原因:利用自定義的paintevent()函式繪圖時,畫布大小並不是子控制項的大小,這時需要在paintevent()函式中將畫布的大小進行調整。
解決方案:可以將子控制項的高度和寬度(width、height)值通過建構函式傳入自定義的類,並在paintevent()函式中調整畫布大小,這樣就完美解決了!
//設定畫布大小
setfixedheight(mheight);
setfixedwidth(mwidth);
QT 視窗重繪事件 paintEvent事件
1 qwidget qscrollview viewport const 返回滾動檢視中的視口視窗部件,這個視窗部件包含內容視窗部件或者要畫的區域。2 void qwidget paintevent qpaintevent 虛 保護 只要視窗部件需要被重繪就被呼叫。每個要顯示輸出的視窗部件必須實現它...
05 方法重寫
在繼承關係中,子類如果定義了乙個與父類方法簽名完全相同的方法,被稱為覆寫 override 加上 override可以讓編譯器幫助檢查是否進行了正確的覆寫。例如,在person類中,我們定義了run 方法 class person 在子類student中,覆寫這個run 方法 class stude...
關於使用JSPatch重寫setter方法
本部落格遷移來自 今天出錯的是oc 針對 setmodel function model model model的處理時,我當時從jspatch的issue中看到有人說使用 self.origsetmodel model 即可,當時也沒有驗證,就一直這麼用。前幾天文章中提到的修復swift bug中...