qt中繪製圖形的常規方法為過載void paintevent(qpaintevent *);函式。但這種方法只能讓我們把影象繪製在主介面上,而不能繪製在一些控制項上。
也許有人會問為什麼要把影象繪製在控制項上?比如說我們要畫一張很大的畫,大到主介面裝不下了,如果強行畫的會有很大一部分無法顯示出來,這時我們就可以選擇將圖形繪製在帶有滾動條的介面上,也就是控制項qscrollarea上。
雖然說起來簡單,但由於控制項是從屬於主介面的,而且我們通常過載的繪製函式只能將圖形繪製在主介面上,強行利用paintevent進行繪製的話,也不會顯示出來,因為此繪製事件會被過濾掉,所以如果想將圖形繪製在控制項上的話,我們就需要用到事件過濾器eventfilter,通過事件過濾器的判斷來進行繪製。
接下來的文章分為兩部分,來逐漸說明如何在qscrollarea上繪製圖形。
1.如何在label上繪製圖形
2.如何在qscrollarea繪製圖形
一、在label上繪製
1.新建工程
基類選擇為qwidget
2.修改.**件
引入qpainter和qlabel標頭檔案用於繪製和新建label。
然後在公開變數中加上事件過濾器相關函式,繪製函式,和新建乙個label變數。
#ifndef widget_h
#define widget_h
#include
#include
#include
namespace ui
class
widget
:public qwidget
;#endif
// widget_h
2.修改widget.cpp檔案在建構函式中對label具體操作,並將label加入事件過濾器中。
事件過濾器函式當物件為label時對其進行繪製操作,呼叫magictime函式。
編寫繪製函式繪製乙個紅色的矩形。
#include
"widget.h"
#include
"ui_widget.h"
widget::
widget
(qwidget *parent)
:qwidget
(parent),ui
(new ui::widget)
widget::
~widget()
bool widget::
eventfilter
(qobject *obj, qevent *event)
return qwidget::
eventfilter
(obj,event);}
void widget::
magictime()
效果如下:
二、在qscrollarea上繪製
與上面的在label上繪製相似,如果我們希望在qscrollarea繪製的話,只需要新建乙個相關變數,改一下事件過濾器中的事件,並把繪製函式中qpainter變數的介面改為新建的介面。
1.修改.**件
引入標頭檔案qscrollarea和qscrollarea,如果基類選擇為qmainwindow的話,還需要引入qwidget。
在公開變數中加入事件過濾器和繪畫相關的函式,並新建乙個qscrollarea和乙個qwidget變數,用來新建帶有滾動條的介面。
#ifndef widget_h
#define widget_h
#include
#include
#include
#include
#include
namespace ui
class
widget
:public qwidget
;#endif
// widget_h
2.修改widget.cpp檔案在建構函式中設定滾動條介面的引數
將事件過濾器中的物件和繪製介面改為qwidget變數w(因為這是繪製的實際介面)
利用繪製函式繪製乙個主介面裝不下的矩形
(當我們拖動進度條時可以看到矩形的全貌)
#include
"widget.h"
#include
"ui_widget.h"
widget::
widget
(qwidget *parent)
:qwidget
(parent),ui
(new ui::widget)
widget::
~widget()
bool widget::
eventfilter
(qobject *obj, qevent *event)
return qwidget::
eventfilter
(obj,event);}
void widget::
magictime()
效果如下:
Qt 滾動條樣式設定
新手編碼,記錄以防忘記。qscrollbar vertical width 9px background rgba 56,135,255,0 margin 0px,0px,0px,0px padding top 9px 留出9px給上面和下面的箭頭 padding bottom 9px qscrol...
Qt551 視窗滾動條
1 的方式來建立 scrollarea,然後使用 倒是 正常 有滾動條顯示 但是此方式太麻煩 不如直接拖控制項來的方便直觀快捷。但是,直接拖控制項的方式 scrollarea中無法顯示出 滾動條,怎麼設定都沒用.zc 後來這樣做 可以顯示 滾動條了 只是記錄下操作,未了解其中原理 操作 1 在主介面...
QT通過點選獲得帶滾動條介面的座標(QT系列9)
獲得帶滾動條介面的座標前提知識為 1.滑鼠事件qt鍵盤滑鼠事件 2.新建帶滾動條介面qt新建帶滾動條介面的兩種方式 獲得帶滾條介面的座標與獲得主介面座標的區別,就在於我們需要獲得滾動條滑過的距離,並通過這個距離實現座標系的變換。1.新建工程 基類型別選擇為qwidget 在ui介面拖入乙個pushb...