QT在滾動條介面上進行繪製(QT系列6)

2021-10-05 20:47:02 字數 2801 閱讀 5419

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...