QAbstractScrollArea 類

The QAbstractScrollArea 小部件提供帶按需滾動條的捲動區域。 更多...

頭: #include <QAbstractScrollArea>
qmake: QT += widgets
繼承: QFrame
繼承者: QAbstractItemView , QGraphicsView , QMdiArea , QPlainTextEdit , QScrollArea ,和 QTextEdit

公共類型

enum SizeAdjustPolicy { AdjustIgnored, AdjustToContents, AdjustToContentsOnFirstShow }

特性

公共函數

QAbstractScrollArea (QWidget * parent = Q_NULLPTR)
~QAbstractScrollArea ()
void addScrollBarWidget (QWidget * widget , Qt::Alignment alignment )
QWidget * cornerWidget () const
QScrollBar * horizontalScrollBar () const
Qt::ScrollBarPolicy horizontalScrollBarPolicy () const
QSize maximumViewportSize () const
QWidgetList scrollBarWidgets (Qt::Alignment alignment )
void setCornerWidget (QWidget * widget )
void setHorizontalScrollBar (QScrollBar * scrollBar )
void setHorizontalScrollBarPolicy ( Qt::ScrollBarPolicy )
void setSizeAdjustPolicy (SizeAdjustPolicy policy )
void setVerticalScrollBar (QScrollBar * scrollBar )
void setVerticalScrollBarPolicy ( Qt::ScrollBarPolicy )
void setViewport (QWidget * widget )
virtual void setupViewport (QWidget * viewport )
SizeAdjustPolicy sizeAdjustPolicy () const
QScrollBar * verticalScrollBar () const
Qt::ScrollBarPolicy verticalScrollBarPolicy () const
QWidget * viewport () const

重實現公共函數

virtual QSize minimumSizeHint () const
virtual QSize sizeHint () const

保護函數

virtual void scrollContentsBy (int dx , int dy )
void setViewportMargins (int left , int top , int right , int bottom )
void setViewportMargins (const QMargins & margins )
virtual bool viewportEvent (QEvent * event )
QMargins viewportMargins () const
virtual QSize viewportSizeHint () const

重實現保護函數

virtual void contextMenuEvent (QContextMenuEvent * e )
virtual void dragEnterEvent (QDragEnterEvent * event )
virtual void dragLeaveEvent (QDragLeaveEvent * event )
virtual void dragMoveEvent (QDragMoveEvent * event )
virtual void dropEvent (QDropEvent * event )
virtual bool event (QEvent * event )
virtual void keyPressEvent (QKeyEvent * e )
virtual void mouseDoubleClickEvent (QMouseEvent * e )
virtual void mouseMoveEvent (QMouseEvent * e )
virtual void mousePressEvent (QMouseEvent * e )
virtual void mouseReleaseEvent (QMouseEvent * e )
virtual void paintEvent (QPaintEvent * event )
virtual void resizeEvent (QResizeEvent * event )
virtual void wheelEvent (QWheelEvent * e )

額外繼承成員

詳細描述

The QAbstractScrollArea 小部件提供帶按需滾動條的捲動區域。

QAbstractScrollArea is a low-level abstraction of a scrolling area. The area provides a central widget called the viewport, in which the contents of the area is to be scrolled (i.e, the visible parts of the contents are rendered in the viewport).

視口旁邊是垂直滾動條,和下方是水平滾動條。當所有區域內容擬閤視口時,各滾動條可以是可見的 (或被隱藏) 從屬滾動條的 Qt::ScrollBarPolicy 。當滾動條隱藏時,視口展開以覆蓋所有可用空間。當滾動條再次變為可見時,視口收縮為滾動條騰齣空間。

在視口周圍預留邊距區域是可能的,見 setViewportMargins ()。特徵主要用於放置 QHeaderView widget above or beside the scrolling area. Subclasses of QAbstractScrollArea should implement margins.

當繼承 QAbstractScrollArea ,需要做以下:

  • 控製滾動條通過設置其範圍、值、頁麵步長和跟蹤其移動。
  • 繪製視口區域內容根據滾動條值。
  • 處理接收事件通過視口在 viewportEvent () - 顯而易見的是重置大小事件。
  • 使用 viewport->update() 更新視口內容而不是 update() 因為所有描繪操作都發生在視口中。

采用滾動條策略 Qt::ScrollBarAsNeeded (默認), QAbstractScrollArea shows scroll bars when they provide a non-zero scrolling range, and hides them otherwise.

應該更新滾動條和視口,每當視口收到重置大小事件或內容大小變化時。還需更新視口當滾動條值改變時。經常設置滾動條初始值當區域收到新內容時。

簡單範例,實現的捲動區域可以捲動任何 QWidget 。使 Widget 成為視口子級;這樣,不必計算要繪製 Widget 的哪部分,而隻需移動小部件采用 QWidget::move ()。當區域內容或視口大小變化時,做以下:

    QSize areaSize = viewport()->size();
    QSize  widgetSize = widget->size();
    verticalScrollBar()->setPageStep(areaSize.height());
    horizontalScrollBar()->setPageStep(areaSize.width());
    verticalScrollBar()->setRange(0, widgetSize.height() - areaSize.height());
    horizontalScrollBar()->setRange(0, widgetSize.width() - areaSize.width());
    updateWidgetPosition();
					

當滾動條值變化時,需要更新 Widget 位置 (即:在視口中找到要繪製的小部件部分):

    int hvalue = horizontalScrollBar()->value();
    int vvalue = verticalScrollBar()->value();
    QPoint topLeft = viewport()->rect().topLeft();
    widget->move(topLeft.x() - hvalue, topLeft.y() - vvalue);
					

為跟蹤滾動條移動,重實現虛函數 scrollContentsBy ()。為微調捲動行為,連接到滾動條的 QAbstractSlider::actionTriggered () 信號和調節 QAbstractSlider::sliderPosition 如希望。

For convenience, QAbstractScrollArea makes all viewport events available in the virtual viewportEvent () 處理程序。 QWidget 的專用處理程序會被重映射到視口事件,在這種情況下,這是有意義的。重映射的專用處理程序是: paintEvent (), mousePressEvent (), mouseReleaseEvent (), mouseDoubleClickEvent (), mouseMoveEvent (), wheelEvent (), dragEnterEvent (), dragMoveEvent (), dragLeaveEvent (), dropEvent (), contextMenuEvent (),和 resizeEvent ().

QScrollArea , which inherits QAbstractScrollArea , provides smooth scrolling for any QWidget (i.e., the widget is scrolled pixel by pixel). You only need to subclass QAbstractScrollArea if you need more specialized behavior. This is, for instance, true if the entire contents of the area is not suitable for being drawn on a QWidget 或者若不想要平滑捲動。

另請參閱 QScrollArea .

成員類型文檔編製

enum QAbstractScrollArea:: SizeAdjustPolicy

此枚舉指定大小提示如何 QAbstractScrollArea 調節當視口大小變化時。

常量 描述
QAbstractScrollArea::AdjustIgnored 0 捲動區域行為像之前 - 和不做任何調節。
QAbstractScrollArea::AdjustToContents 2 捲動區域將始終調整到視口
QAbstractScrollArea::AdjustToContentsOnFirstShow 1 捲動區域將在首次展示時調節到其視口。

該枚舉在 Qt 5.2 引入或被修改。

特性文檔編製

horizontalScrollBarPolicy : Qt::ScrollBarPolicy

此特性保持水平滾動條的策略

默認策略為 Qt::ScrollBarAsNeeded .

訪問函數:

Qt::ScrollBarPolicy horizontalScrollBarPolicy () const
void setHorizontalScrollBarPolicy ( Qt::ScrollBarPolicy )

另請參閱 verticalScrollBarPolicy .

sizeAdjustPolicy : SizeAdjustPolicy

此特性保持捲動區域大小如何變化的描述策略,當視口大小變化時。

默認策略為 QAbstractScrollArea::AdjustIgnored 。改變此特性可能實際重置滾動區域大小。

該特性在 Qt 5.2 引入。

訪問函數:

SizeAdjustPolicy sizeAdjustPolicy () const
void setSizeAdjustPolicy (SizeAdjustPolicy policy )

verticalScrollBarPolicy : Qt::ScrollBarPolicy

此特性保持垂直滾動條的策略

默認策略為 Qt::ScrollBarAsNeeded .

訪問函數:

Qt::ScrollBarPolicy verticalScrollBarPolicy () const
void setVerticalScrollBarPolicy ( Qt::ScrollBarPolicy )

另請參閱 horizontalScrollBarPolicy .

成員函數文檔編製

QAbstractScrollArea:: QAbstractScrollArea ( QWidget * parent = Q_NULLPTR)

構造視口。

The parent 自變量被發送給 QWidget 構造函數。

QAbstractScrollArea:: ~QAbstractScrollArea ()

銷毀視口。

void QAbstractScrollArea:: addScrollBarWidget ( QWidget * widget , Qt::Alignment alignment )

添加 widget 作為滾動條 Widget 在指定位置按 alignment .

滾動條 Widget 緊鄰水平滾動條 (或垂直滾動條) 展示,且可以放置在其任一側。若想要滾動條 Widget 始終可見,將相應滾動條的 scrollBarPolicy 設為 AlwaysOn .

alignment 必須是某一 Qt::Alignleft 和 Qt::AlignRight ,映射到水平滾動條,或 Qt::AlignTop and Qt::AlignBottom ,映射到垂直滾動條。

通過重新父級小部件可以移除滾動條 Widget 或刪除它。也是可能的隱藏小部件采用 QWidget::hide ()

滾動條 Widget 將重置大小以擬閤當前樣式的滾動條幾何體。以下描述在水平滾動條中的滾動條 Widget 情況:

Widget 的高度設為匹配滾動條的高度。要控製 Widget 的寬度,使用 QWidget::setMinimumWidth and QWidget::setMaximumWidth ,或實現 QWidget::sizeHint () 和設置水平尺寸策略。若想要方形 Widget,調用 QStyle::pixelMetric ( QStyle::PM_ScrollBarExtent ) 並將寬度設為此值。

該函數在 Qt 4.2 引入。

另請參閱 scrollBarWidgets ().

[virtual protected] void QAbstractScrollArea:: contextMenuEvent ( QContextMenuEvent * e )

重實現自 QWidget::contextMenuEvent ().

此事件處理程序可以在子類中重實現,以接收上下文菜單事件為 viewport () 小部件。事件被傳入 e .

另請參閱 QWidget::contextMenuEvent ().

QWidget *QAbstractScrollArea:: cornerWidget () const

返迴 2 滾動條之間的角落 Widget。

默認情況下,不存在角落 Widget。

該函數在 Qt 4.2 引入。

另請參閱 setCornerWidget ().

[virtual protected] void QAbstractScrollArea:: dragEnterEvent ( QDragEnterEvent * event )

重實現自 QWidget::dragEnterEvent ().

此事件處理程序可以在子類中重實現,以接收拖拽進入事件 (被傳入 event ),對於 viewport () 小部件。

另請參閱 QWidget::dragEnterEvent ().

[virtual protected] void QAbstractScrollArea:: dragLeaveEvent ( QDragLeaveEvent * event )

重實現自 QWidget::dragLeaveEvent ().

此事件處理程序可以在子類中重實現,以接收拖拽離開事件 (被傳入 event ),對於 viewport () 小部件。

另請參閱 QWidget::dragLeaveEvent ().

[virtual protected] void QAbstractScrollArea:: dragMoveEvent ( QDragMoveEvent * event )

重實現自 QWidget::dragMoveEvent ().

此事件處理程序可以在子類中重實現,以接收拖拽移動事件 (被傳入 event ),對於 viewport () 小部件。

另請參閱 QWidget::dragMoveEvent ().

[virtual protected] void QAbstractScrollArea:: dropEvent ( QDropEvent * event )

重實現自 QWidget::dropEvent ().

此事件處理程序可以在子類中重實現,以接收掉落事件 (被傳入 event ),對於 viewport () 小部件。

另請參閱 QWidget::dropEvent ().

[virtual protected] bool QAbstractScrollArea:: event ( QEvent * event )

重實現自 QObject::event ().

這是主事件處理程序對於 QAbstractScrollArea 小部件 ( not 捲動區域 viewport ())。指定 event 是可能需要根據其類型被鑄造成適當類的一般事件對象。

另請參閱 QEvent::type ().

QScrollBar *QAbstractScrollArea:: horizontalScrollBar () const

返迴水平滾動條。

另請參閱 setHorizontalScrollBar (), horizontalScrollBarPolicy ,和 verticalScrollBar ().

[virtual protected] void QAbstractScrollArea:: keyPressEvent ( QKeyEvent * e )

重實現自 QWidget::keyPressEvent ().

此函數被調用采用鍵事件 e 當發生鍵按下時。它處理 PageUp、PageDown、嚮上、嚮下、嚮左和嚮右,並忽略所有其它鍵按下。

QSize QAbstractScrollArea:: maximumViewportSize () const

返迴視口大小,就像滾動條沒有有效捲動範圍。

[虛擬] QSize QAbstractScrollArea:: minimumSizeHint () const

重實現自 QWidget::minimumSizeHint ().

[virtual protected] void QAbstractScrollArea:: mouseDoubleClickEvent ( QMouseEvent * e )

重實現自 QWidget::mouseDoubleClickEvent ().

此事件處理程序可以在子類中重實現,以接收鼠標雙擊事件為 viewport () 小部件。事件被傳入 e .

另請參閱 QWidget::mouseDoubleClickEvent ().

[virtual protected] void QAbstractScrollArea:: mouseMoveEvent ( QMouseEvent * e )

重實現自 QWidget::mouseMoveEvent ().

此事件處理程序可以在子類中重實現,以接收鼠標移動事件為 viewport () 小部件。事件被傳入 e .

另請參閱 QWidget::mouseMoveEvent ().

[virtual protected] void QAbstractScrollArea:: mousePressEvent ( QMouseEvent * e )

重實現自 QWidget::mousePressEvent ().

此事件處理程序可以在子類中重實現,以接收鼠標按下事件為 viewport () 小部件。事件被傳入 e .

另請參閱 QWidget::mousePressEvent ().

[virtual protected] void QAbstractScrollArea:: mouseReleaseEvent ( QMouseEvent * e )

重實現自 QWidget::mouseReleaseEvent ().

此事件處理程序可以在子類中重實現,以接收鼠標釋放事件為 viewport () 小部件。事件被傳入 e .

另請參閱 QWidget::mouseReleaseEvent ().

[virtual protected] void QAbstractScrollArea:: paintEvent ( QPaintEvent * event )

重實現自 QWidget::paintEvent ().

此事件處理程序可以在子類中重實現,以接收描繪事件 (被傳入 event ),對於 viewport () 小部件。

注意: 若打開描繪器,確保打開它是在 viewport ().

另請參閱 QWidget::paintEvent ().

[virtual protected] void QAbstractScrollArea:: resizeEvent ( QResizeEvent * event )

重實現自 QWidget::resizeEvent ().

此事件處理程序可以在子類中重實現,以接收重置大小事件 (被傳入 event ),對於 viewport () 小部件。

當調用 resizeEvent() 時,視口已經擁有新的幾何體:可以訪問它的新尺寸透過 QResizeEvent::size () 函數,和舊尺寸透過 QResizeEvent::oldSize ().

另請參閱 QWidget::resizeEvent ().

QWidgetList QAbstractScrollArea:: scrollBarWidgets ( Qt::Alignment alignment )

返迴目前設置的滾動條 Widget 列錶。 alignment 可以是 4 個位置標誌的任意組閤。

該函數在 Qt 4.2 引入。

另請參閱 addScrollBarWidget ().

[virtual protected] void QAbstractScrollArea:: scrollContentsBy ( int dx , int dy )

調用此虛擬處理程序當滾動條被移動按 dx , dy ,因此,應相應捲動視口內容。

默認實現隻需調用 update () 在整個 viewport (),子類可以為優化目的重實現此處理程序,或者 - 像 QScrollArea - 移動內容 Widget。參數 dx and dy 是為瞭方便,以便類知道應該捲動多少 (這很有用,如做像素偏移時)。還可以忽略這些值,並直接捲動到滾動條指示位置。

調用此函數以編程方式捲動是錯誤的,用滾動條代替 (如,通過調用 QScrollBar::setValue () 直接)。

void QAbstractScrollArea:: setCornerWidget ( QWidget * widget )

將 2 滾動條之間的角落 Widget 設為 widget .

可能還想把至少一滾動條模式設為 AlwaysOn .

傳遞 0 不展示角落 Widget。

隱藏先前的任何角落 Widget。

可以調用 SetCornerWidget() 在不同時間采用相同 Widget。

All widgets set here will be deleted by the scroll area when it is destroyed unless you separately reparent the widget after setting some other corner widget (or 0).

任何 newly 設置的 Widget 不應擁有當前父級。

默認情況下,不存在角落 Widget。

該函數在 Qt 4.2 引入。

另請參閱 cornerWidget (), horizontalScrollBarPolicy ,和 horizontalScrollBarPolicy .

void QAbstractScrollArea:: setHorizontalScrollBar ( QScrollBar * scrollBar )

替換現有水平滾動條采用 scrollBar ,並在新滾動條中設置之前滾動條的所有滑塊特性。然後刪除之前的滾動條。

QAbstractScrollArea 默認情況下,已提供水平滾動條和垂直滾動條。可以調用此函數將默認水平滾動條替換為自己的自定義滾動條。

該函數在 Qt 4.2 引入。

另請參閱 horizontalScrollBar () 和 setVerticalScrollBar ().

void QAbstractScrollArea:: setVerticalScrollBar ( QScrollBar * scrollBar )

替換現有垂直滾動條采用 scrollBar ,並在新滾動條中設置之前滾動條的所有滑塊特性。然後刪除之前的滾動條。

QAbstractScrollArea 默認情況下,已提供垂直滾動條和水平滾動條。可以調用此函數將默認垂直滾動條替換為自己的自定義滾動條。

該函數在 Qt 4.2 引入。

另請參閱 verticalScrollBar () 和 setHorizontalScrollBar ().

void QAbstractScrollArea:: setViewport ( QWidget * widget )

將視口設為給定 widget QAbstractScrollArea 將擁有所有權對於給定 widget .

widget 為 0, QAbstractScrollArea 將賦值新的 QWidget 實例為視口。

該函數在 Qt 4.2 引入。

另請參閱 viewport ().

[protected] void QAbstractScrollArea:: setViewportMargins ( int left , int top , int right , int bottom )

將捲動區域周圍邊距設為 left , top , right and bottom 。這對 (譬如:具有鎖定行和列的電子錶格) 應用程序很有用。邊緣空間留白;就 Widget 放在未使用區域。

注意,此函數經常被頻繁調用由 QTreeView and QTableView ,因此邊距的實現必須通過 QAbstractScrollArea 子類。此外,若要在項視圖中使用子類,它們不應調用此函數。

默認情況下,所有邊距為 0。

另請參閱 viewportMargins ().

[protected] void QAbstractScrollArea:: setViewportMargins (const QMargins & margins )

margins 圍繞捲動區域。這對 (譬如:具有鎖定行和列的電子錶格) 應用程序,很有用。邊緣空間留白;把 Widget 放在未使用區域。

默認情況下,所有邊距為 0。

該函數在 Qt 4.6 引入。

另請參閱 viewportMargins ().

[虛擬] void QAbstractScrollArea:: setupViewport ( QWidget * viewport )

此槽被調用通過 QAbstractScrollArea after setViewport ( viewport ) 被調用。重實現此函數在子類化的 QAbstractScrollArea 以初始化新的 viewport 在使用它之前。

另請參閱 setViewport ().

[虛擬] QSize QAbstractScrollArea:: sizeHint () const

重實現自 QWidget::sizeHint ().

返迴捲動區域 sizeHint 特性。大小的確定通過使用 viewportSizeHint () 加一些額外滾動條空間,若需要。

QScrollBar *QAbstractScrollArea:: verticalScrollBar () const

返迴垂直滾動條。

另請參閱 setVerticalScrollBar (), verticalScrollBarPolicy ,和 horizontalScrollBar ().

QWidget *QAbstractScrollArea:: viewport () const

返迴視口 Widget。

使用 QScrollArea::widget () 函數檢索視口 Widget 內容。

另請參閱 setViewport () 和 QScrollArea::widget ().

[virtual protected] bool QAbstractScrollArea:: viewportEvent ( QEvent * event )

用於捲動區域的主要事件處理程序 ( viewport () 小部件)。它處理 event 指定,且可以被子類調用以提供閤理默認行為。

返迴 true 指示事件係統已處理該事件,不需要進一步處理;否則返迴 false 指示應進一步傳播該事件。

可以在子類中重實現此函數,但推薦使用某一專用事件處理程序代替。

專用視口事件處理程序是: paintEvent (), mousePressEvent (), mouseReleaseEvent (), mouseDoubleClickEvent (), mouseMoveEvent (), wheelEvent (), dragEnterEvent (), dragMoveEvent (), dragLeaveEvent (), dropEvent (), contextMenuEvent (),和 resizeEvent ().

[protected] QMargins QAbstractScrollArea:: viewportMargins () const

返迴在捲動區域周圍的邊距。默認情況下,所有邊距為 0。

該函數在 Qt 5.5 引入。

另請參閱 setViewportMargins ().

[virtual protected] QSize QAbstractScrollArea:: viewportSizeHint () const

返迴推薦視口大小。默認實現返迴 viewport ()-> sizeHint ()。注意,大小僅僅是視口大小,不包括任何可見滾動條。

該函數在 Qt 5.2 引入。

[virtual protected] void QAbstractScrollArea:: wheelEvent ( QWheelEvent * e )

重實現自 QWidget::wheelEvent ().

此事件處理程序可以在子類中重實現,以接收滾輪事件為 viewport () 小部件。事件被傳入 e .

另請參閱 QWidget::wheelEvent ().