The QAbstractScrollArea 小部件提供帶按需滾動條的捲動區域。 更多...
| 頭: | #include <QAbstractScrollArea> |
| qmake: | QT += widgets |
| 繼承: | QFrame |
| 繼承者: | QAbstractItemView , QGraphicsView , QMdiArea , QPlainTextEdit , QScrollArea ,和 QTextEdit |
| enum | SizeAdjustPolicy { AdjustIgnored, AdjustToContents, AdjustToContentsOnFirstShow } |
| QAbstractScrollArea (QWidget * parent = nullptr) | |
| virtual | ~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 (QAbstractScrollArea::SizeAdjustPolicy policy ) |
| void | setVerticalScrollBar (QScrollBar * scrollBar ) |
| void | setVerticalScrollBarPolicy ( Qt::ScrollBarPolicy ) |
| void | setViewport (QWidget * widget ) |
| virtual void | setupViewport (QWidget * viewport ) |
| QAbstractScrollArea::SizeAdjustPolicy | sizeAdjustPolicy () const |
| QScrollBar * | verticalScrollBar () const |
| Qt::ScrollBarPolicy | verticalScrollBarPolicy () const |
| QWidget * | viewport () const |
| virtual QSize | minimumSizeHint () const override |
| virtual QSize | sizeHint () const override |
| const QMetaObject | staticMetaObject |
| 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 ) override |
| virtual void | dragEnterEvent (QDragEnterEvent * event ) override |
| virtual void | dragLeaveEvent (QDragLeaveEvent * event ) override |
| virtual void | dragMoveEvent (QDragMoveEvent * event ) override |
| virtual void | dropEvent (QDropEvent * event ) override |
| virtual bool | event (QEvent * event ) override |
| virtual void | keyPressEvent (QKeyEvent * e ) override |
| virtual void | mouseDoubleClickEvent (QMouseEvent * e ) override |
| virtual void | mouseMoveEvent (QMouseEvent * e ) override |
| virtual void | mousePressEvent (QMouseEvent * e ) override |
| virtual void | mouseReleaseEvent (QMouseEvent * e ) override |
| virtual void | paintEvent (QPaintEvent * event ) override |
| virtual void | resizeEvent (QResizeEvent * event ) override |
| virtual void | wheelEvent (QWheelEvent * e ) override |
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 ,需要做以下:
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 .
此枚舉指定大小提示如何 QAbstractScrollArea 調節當視口大小變化時。
| 常量 | 值 | 描述 |
|---|---|---|
QAbstractScrollArea::AdjustIgnored
|
0
|
捲動區域行為像之前 - 和不做任何調節。 |
QAbstractScrollArea::AdjustToContents
|
2
|
捲動區域將始終調整到視口 |
QAbstractScrollArea::AdjustToContentsOnFirstShow
|
1
|
捲動區域將在首次展示時調節到其視口。 |
該枚舉在 Qt 5.2 引入或被修改。
此特性保持水平滾動條的策略
默認策略為 Qt::ScrollBarAsNeeded .
訪問函數:
| Qt::ScrollBarPolicy | horizontalScrollBarPolicy () const |
| void | setHorizontalScrollBarPolicy ( Qt::ScrollBarPolicy ) |
另請參閱 verticalScrollBarPolicy .
此特性保持捲動區域大小如何變化的描述策略,當視口大小變化時。
默認策略為 QAbstractScrollArea::AdjustIgnored 。改變此特性可能實際重置滾動區域大小。
該特性在 Qt 5.2 引入。
訪問函數:
| QAbstractScrollArea::SizeAdjustPolicy | sizeAdjustPolicy () const |
| void | setSizeAdjustPolicy (QAbstractScrollArea::SizeAdjustPolicy policy ) |
此特性保持垂直滾動條的策略
默認策略為 Qt::ScrollBarAsNeeded .
訪問函數:
| Qt::ScrollBarPolicy | verticalScrollBarPolicy () const |
| void | setVerticalScrollBarPolicy ( Qt::ScrollBarPolicy ) |
另請參閱 horizontalScrollBarPolicy .
構造視口。
The parent 自變量被發送給 QWidget 構造函數。
[虛擬]
QAbstractScrollArea::
~QAbstractScrollArea
()
銷毀視口。
添加 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 ().
[override virtual protected]
void
QAbstractScrollArea::
contextMenuEvent
(
QContextMenuEvent
*
e
)
重實現自 QWidget::contextMenuEvent ().
此事件處理程序可以在子類中重實現,以接收上下文菜單事件為 viewport () 小部件。事件被傳入 e .
另請參閱 QWidget::contextMenuEvent ().
返迴 2 滾動條之間的角落 Widget。
默認情況下,不存在角落 Widget。
該函數在 Qt 4.2 引入。
另請參閱 setCornerWidget ().
[override virtual protected]
void
QAbstractScrollArea::
dragEnterEvent
(
QDragEnterEvent
*
event
)
重實現自 QWidget::dragEnterEvent ().
此事件處理程序可以在子類中重實現,以接收拖拽進入事件 (被傳入 event ),對於 viewport () 小部件。
另請參閱 QWidget::dragEnterEvent ().
[override virtual protected]
void
QAbstractScrollArea::
dragLeaveEvent
(
QDragLeaveEvent
*
event
)
重實現自 QWidget::dragLeaveEvent ().
此事件處理程序可以在子類中重實現,以接收拖拽離開事件 (被傳入 event ),對於 viewport () 小部件。
另請參閱 QWidget::dragLeaveEvent ().
[override virtual protected]
void
QAbstractScrollArea::
dragMoveEvent
(
QDragMoveEvent
*
event
)
重實現自 QWidget::dragMoveEvent ().
此事件處理程序可以在子類中重實現,以接收拖拽移動事件 (被傳入 event ),對於 viewport () 小部件。
另請參閱 QWidget::dragMoveEvent ().
[override virtual protected]
void
QAbstractScrollArea::
dropEvent
(
QDropEvent
*
event
)
重實現自 QWidget::dropEvent ().
此事件處理程序可以在子類中重實現,以接收掉落事件 (被傳入 event ),對於 viewport () 小部件。
另請參閱 QWidget::dropEvent ().
[override virtual protected]
bool
QAbstractScrollArea::
event
(
QEvent
*
event
)
重實現自 QFrame::event ().
這是主事件處理程序對於 QAbstractScrollArea 小部件 ( not 捲動區域 viewport ())。指定 event 是可能需要根據其類型被鑄造成適當類的一般事件對象。
另請參閱 QEvent::type ().
返迴水平滾動條。
另請參閱 setHorizontalScrollBar (), horizontalScrollBarPolicy ,和 verticalScrollBar ().
[override virtual protected]
void
QAbstractScrollArea::
keyPressEvent
(
QKeyEvent
*
e
)
重實現自 QWidget::keyPressEvent ().
此函數被調用采用鍵事件 e 當發生鍵按下時。它處理 PageUp、PageDown、嚮上、嚮下、嚮左和嚮右,並忽略所有其它鍵按下。
返迴視口大小,就像滾動條沒有有效捲動範圍。
[override virtual]
QSize
QAbstractScrollArea::
minimumSizeHint
() const
重實現自 QWidget::minimumSizeHint ().
[override virtual protected]
void
QAbstractScrollArea::
mouseDoubleClickEvent
(
QMouseEvent
*
e
)
重實現自 QWidget::mouseDoubleClickEvent ().
此事件處理程序可以在子類中重實現,以接收鼠標雙擊事件為 viewport () 小部件。事件被傳入 e .
另請參閱 QWidget::mouseDoubleClickEvent ().
[override virtual protected]
void
QAbstractScrollArea::
mouseMoveEvent
(
QMouseEvent
*
e
)
重實現自 QWidget::mouseMoveEvent ().
此事件處理程序可以在子類中重實現,以接收鼠標移動事件為 viewport () 小部件。事件被傳入 e .
另請參閱 QWidget::mouseMoveEvent ().
[override virtual protected]
void
QAbstractScrollArea::
mousePressEvent
(
QMouseEvent
*
e
)
重實現自 QWidget::mousePressEvent ().
此事件處理程序可以在子類中重實現,以接收鼠標按下事件為 viewport () 小部件。事件被傳入 e .
另請參閱 QWidget::mousePressEvent ().
[override virtual protected]
void
QAbstractScrollArea::
mouseReleaseEvent
(
QMouseEvent
*
e
)
重實現自 QWidget::mouseReleaseEvent ().
此事件處理程序可以在子類中重實現,以接收鼠標釋放事件為 viewport () 小部件。事件被傳入 e .
另請參閱 QWidget::mouseReleaseEvent ().
[override virtual protected]
void
QAbstractScrollArea::
paintEvent
(
QPaintEvent
*
event
)
重實現自 QFrame::paintEvent ().
此事件處理程序可以在子類中重實現,以接收描繪事件 (被傳入 event ),對於 viewport () 小部件。
注意: 若打開描繪器,確保打開它是在 viewport ().
另請參閱 QWidget::paintEvent ().
[override virtual protected]
void
QAbstractScrollArea::
resizeEvent
(
QResizeEvent
*
event
)
重實現自 QWidget::resizeEvent ().
此事件處理程序可以在子類中重實現,以接收重置大小事件 (被傳入 event ),對於 viewport () 小部件。
當調用 resizeEvent() 時,視口已經擁有新的幾何體:可以訪問它的新尺寸透過 QResizeEvent::size () 函數,和舊尺寸透過 QResizeEvent::oldSize ().
另請參閱 QWidget::resizeEvent ().
返迴目前設置的滾動條 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 () 直接)。
將 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 .
替換現有水平滾動條采用 scrollBar ,並在新滾動條中設置之前滾動條的所有滑塊特性。然後刪除之前的滾動條。
QAbstractScrollArea 默認情況下,已提供水平滾動條和垂直滾動條。可以調用此函數將默認水平滾動條替換為自己的自定義滾動條。
該函數在 Qt 4.2 引入。
另請參閱 horizontalScrollBar () 和 setVerticalScrollBar ().
替換現有垂直滾動條采用 scrollBar ,並在新滾動條中設置之前滾動條的所有滑塊特性。然後刪除之前的滾動條。
QAbstractScrollArea 默認情況下,已提供垂直滾動條和水平滾動條。可以調用此函數將默認垂直滾動條替換為自己的自定義滾動條。
該函數在 Qt 4.2 引入。
另請參閱 verticalScrollBar () 和 setHorizontalScrollBar ().
將視口設為給定 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 ().
[override virtual]
QSize
QAbstractScrollArea::
sizeHint
() const
重實現自 QFrame::sizeHint ().
返迴捲動區域 sizeHint 特性。大小的確定通過使用 viewportSizeHint () 加一些額外滾動條空間,若需要。
返迴垂直滾動條。
另請參閱 setVerticalScrollBar (), verticalScrollBarPolicy ,和 horizontalScrollBar ().
返迴視口 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 引入。
[override virtual protected]
void
QAbstractScrollArea::
wheelEvent
(
QWheelEvent
*
e
)
重實現自 QWidget::wheelEvent ().
此事件處理程序可以在子類中重實現,以接收滾輪事件為 viewport () 小部件。事件被傳入 e .
另請參閱 QWidget::wheelEvent ().