QTableView Class
QTableView 类提供了一个表格视图的默认模型/视图实现。更多内容...
| 头文件: | #include <QTableView> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 继承自: | QAbstractItemView |
| 被继承者: |
属性
|
|
公共函数
| QTableView(QWidget *parent = nullptr) | |
| virtual | ~QTableView() |
| void | clearSpans() |
| int | columnAt(int x) const |
| int | columnSpan(int row, int column) const |
| int | columnViewportPosition(int column) const |
| int | columnWidth(int column) const |
| Qt::PenStyle | gridStyle() const |
| QHeaderView * | horizontalHeader() const |
| bool | isColumnHidden(int column) const |
| bool | isCornerButtonEnabled() const |
| bool | isRowHidden(int row) const |
| bool | isSortingEnabled() const |
| int | rowAt(int y) const |
| int | rowHeight(int row) const |
| int | rowSpan(int row, int column) const |
| int | rowViewportPosition(int row) const |
| void | setColumnHidden(int column, bool hide) |
| void | setColumnWidth(int column, int width) |
| void | setCornerButtonEnabled(bool enable) |
| void | setGridStyle(Qt::PenStyle style) |
| void | setHorizontalHeader(QHeaderView *header) |
| void | setRowHeight(int row, int height) |
| void | setRowHidden(int row, bool hide) |
| void | setSortingEnabled(bool enable) |
| void | setSpan(int row, int column, int rowSpanCount, int columnSpanCount) |
| void | setVerticalHeader(QHeaderView *header) |
| void | setWordWrap(bool on) |
| bool | showGrid() const |
| QHeaderView * | verticalHeader() const |
| bool | wordWrap() const |
重新实现的公共函数
| virtual QModelIndex | indexAt(const QPoint &pos) const override |
| virtual void | scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = EnsureVisible) override |
| virtual void | setModel(QAbstractItemModel *model) override |
| virtual void | setRootIndex(const QModelIndex &index) override |
| virtual void | setSelectionModel(QItemSelectionModel *selectionModel) override |
| virtual QRect | visualRect(const QModelIndex &index) const override |
公共槽
| void | hideColumn(int column) |
| void | hideRow(int row) |
| void | resizeColumnToContents(int column) |
| void | resizeColumnsToContents() |
| void | resizeRowToContents(int row) |
| void | resizeRowsToContents() |
| void | selectColumn(int column) |
| void | selectRow(int row) |
| void | setShowGrid(bool show) |
| void | showColumn(int column) |
| void | showRow(int row) |
| void | sortByColumn(int column, Qt::SortOrder order) |
重新实现的受保护函数
| virtual void | currentChanged(const QModelIndex ¤t, const QModelIndex &previous) override |
| virtual void | dropEvent(QDropEvent *event) override |
| virtual int | horizontalOffset() const override |
| virtual void | initViewItemOption(QStyleOptionViewItem *option) const override |
| virtual bool | isIndexHidden(const QModelIndex &index) const override |
| virtual QModelIndex | moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override |
| virtual void | paintEvent(QPaintEvent *event) override |
| virtual void | scrollContentsBy(int dx, int dy) override |
| virtual QModelIndexList | selectedIndexes() const override |
| virtual void | selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override |
| virtual void | setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags) override |
| virtual int | sizeHintForColumn(int column) const override |
| virtual int | sizeHintForRow(int row) const override |
| virtual void | timerEvent(QTimerEvent *event) override |
| virtual void | updateGeometries() override |
| virtual int | verticalOffset() const override |
| virtual QSize | viewportSizeHint() const override |
| virtual QRegion | visualRegionForSelection(const QItemSelection &selection) const override |
受保护的槽
| void | columnCountChanged(int oldCount, int newCount) |
| void | columnMoved(int column, int oldIndex, int newIndex) |
| void | columnResized(int column, int oldWidth, int newWidth) |
| void | rowCountChanged(int oldCount, int newCount) |
| void | rowMoved(int row, int oldIndex, int newIndex) |
| void | rowResized(int row, int oldHeight, int newHeight) |
详细说明

QTableView 实现了一种表格视图,用于显示来自模型的项。该类用于提供以前由 QTable 类提供的标准表格,但采用了 Qt 模型/视图架构提供的更灵活的方法。
QTableView 类是模型/视图类之一,属于 Qt的模型/视图框架。
QTableView 实现了由QAbstractItemView 类定义的接口,从而能够显示由继承自QAbstractItemModel 类的模型提供的数据。
导航
您可以通过鼠标单击单元格或使用方向键在表格中的单元格之间导航。由于 QTableView 默认启用了tabKeyNavigation ,您还可以按 Tab 和 Backtab 键在单元格之间移动。
视觉外观
表格有一个垂直标题行,可通过verticalHeader()函数获取;还有一个水平标题行,可通过horizontalHeader()函数获取。 表格中每行的高度可通过rowHeight()获取;同样,各列的宽度可通过columnWidth()获取。由于这两者都是普通控件,您可以通过其hide()函数隐藏其中任意一个。每个标题的highlightSections 和sectionsClickable 属性均配置为true 。
行和列可通过hideRow()、hideColumn()、showRow() 以及showColumn() 进行隐藏和显示。它们可通过selectRow() 和selectColumn() 进行选中。表格是否显示网格取决于showGrid 属性。
表格视图中显示的项目,与其他项目视图中的项目一样,均通过标准的delegates 进行渲染和编辑。然而,对于某些任务,能够在表格中插入小部件有时会更方便。小部件可通过setIndexWidget()函数设置到特定索引位置,随后使用indexWidget()函数进行检索。
![]() | 默认情况下,表格中的单元格不会扩展以填满可用空间。 您可以通过拉伸最后一个标题部分,使单元格填满可用空间。使用horizontalHeader() 或verticalHeader() 访问相关标题,并设置该标题的stretchLastSection 属性。 若要根据各列或行的空间需求分配可用空间,请调用视图的resizeColumnsToContents()或resizeRowsToContents()函数。 |
坐标系
对于某些特殊形式的表格,能够在线行和列索引与控件坐标之间进行转换非常有用。rowAt() 函数提供指定行在视图中的 y 坐标;行索引可用于通过rowViewportPosition() 获取相应的 y 坐标。columnAt() 和columnViewportPosition() 函数提供 x 坐标与列索引之间的等效转换操作。
另请参阅 QTableWidget 、视图类、QAbstractItemModel 、QAbstractItemView 以及表模型示例。
属性文档
cornerButtonEnabled : bool
该属性表示左上角的按钮是否处于启用状态
如果该属性值为true ,则表格视图左上角的按钮处于启用状态。点击该按钮将选中表格视图中的所有单元格。
该属性默认值为true 。
访问函数:
| bool | isCornerButtonEnabled() const |
| void | setCornerButtonEnabled(bool enable) |
gridStyle : Qt::PenStyle
该属性存储用于绘制网格的笔触样式。
该属性用于存储绘制网格时使用的样式(参见showGrid )。
访问函数:
| Qt::PenStyle | gridStyle() const |
| void | setGridStyle(Qt::PenStyle style) |
showGrid : bool
该属性决定了网格是否显示
如果该属性值为true ,则为表格绘制网格;如果该属性值为false ,则不绘制网格。默认值为true。
访问函数:
| bool | showGrid() const |
| void | setShowGrid(bool show) |
sortingEnabled : bool
该属性用于指定是否启用排序
如果该属性为true ,则表格启用了排序功能;如果该属性为false ,则未启用排序功能。默认值为false。
注意: 将该属性通过setSortingEnabled()设置为true时, 会立即调用sortByColumn(),并采用当前的排序段和排序顺序。
访问函数:
| bool | isSortingEnabled() const |
| void | setSortingEnabled(bool enable) |
另请参阅 sortByColumn()。
wordWrap : bool
此属性用于指定项目文本的换行策略
如果此属性为“true ”,则项目文本会在必要时按单词分隔点进行换行;否则,文本将完全不换行。此属性的默认值为“true ”。
请注意,即使启用了换行,单元格也不会自动扩展以容纳全部文本。省略号将根据当前的textElideMode 设置插入。
Access 函数:
| bool | wordWrap() const |
| void | setWordWrap(bool on) |
成员函数文档
[explicit] QTableView::QTableView(QWidget *parent = nullptr)
构建一个带有parent 的表格视图来呈现数据。
另请参阅 QAbstractItemModel 。
[virtual noexcept] QTableView::~QTableView()
销毁该表视图。
void QTableView::clearSpans()
删除表格视图中的所有行跨行和列跨列。
另请参阅 setSpan()。
int QTableView::columnAt(int x) const
返回内容坐标系中给定 x 坐标(x )所在的列。
注意: 如果给定的坐标无效(不存在该列),则该 函数返回 -1。
另请参阅 rowAt()。
[protected slot] void QTableView::columnCountChanged(int oldCount, int newCount)
每当添加或删除列时,都会调用此回调函数。之前的列数由oldCount 指定,新的列数由newCount 指定。
[protected slot] void QTableView::columnMoved(int column, int oldIndex, int newIndex)
调用此插槽用于更改表格视图中给定column 的索引。旧索引由oldIndex 指定,新索引由newIndex 指定。
另请参阅 rowMoved()。
[protected slot] void QTableView::columnResized(int column, int oldWidth, int newWidth)
调用此插槽可更改给定的column 的宽度。旧宽度由oldWidth 指定,新宽度由newWidth 指定。
另请参阅 rowResized()。
int QTableView::columnSpan(int row, int column) const
返回位于 (row,column) 处的 table 元素的列跨度。默认值为 1。
int QTableView::columnViewportPosition(int column) const
返回给定column 在内容坐标系中的x坐标。
int QTableView::columnWidth(int column) const
返回给定column 的宽度。
另请参阅 setColumnWidth()、resizeColumnToContents() 和rowHeight()。
[override virtual protected] void QTableView::currentChanged(const QModelIndex ¤t, const QModelIndex &previous)
重写自:QAbstractItemView::currentChanged (const QModelIndex ¤t, const QModelIndex &previous)。
[override virtual protected] void QTableView::dropEvent(QDropEvent *event)
重写了:QAbstractItemView::dropEvent(QDropEvent *event)。
[slot] void QTableView::hideColumn(int column)
隐藏给定的column 。
另请参阅 showColumn() 和hideRow()。
[slot] void QTableView::hideRow(int row)
隐藏给定的row 。
另请参阅 showRow() 和hideColumn()。
QHeaderView *QTableView::horizontalHeader() const
返回表格视图的水平标题栏。
另请参阅 setHorizontalHeader()、verticalHeader() 和QAbstractItemModel::headerData()。
[override virtual protected] int QTableView::horizontalOffset() const
重写:QAbstractItemView::horizontalOffset() const。
返回表格视图中各项的水平偏移量。
请注意,表格视图使用横向标题区的位置来确定视图中各列的位置。
另请参阅 verticalOffset()。
[override virtual] QModelIndex QTableView::indexAt(const QPoint &pos) const
重写:QAbstractItemView::indexAt(const QPoint &point) const。
返回与位置为pos (以内容坐标系为准)的表格项相对应的模型项的索引位置。
[override virtual protected] void QTableView::initViewItemOption(QStyleOptionViewItem *option) const
重写了:QAbstractItemView::initViewItemOption(QStyleOptionViewItem *option) const。
bool QTableView::isColumnHidden(int column) const
如果给定的column 处于隐藏状态,则返回true ;否则返回false 。
另请参阅 isRowHidden()。
[override virtual protected] bool QTableView::isIndexHidden(const QModelIndex &index) const
重写了:QAbstractItemView::isIndexHidden(const QModelIndex &index) const。
bool QTableView::isRowHidden(int row) const
如果给定的row 被隐藏,则返回true ;否则返回false 。
另请参阅 isColumnHidden()。
[override virtual protected] QModelIndex QTableView::moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers)
重写:QAbstractItemView::moveCursor (QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers)。
根据给定的cursorAction ,利用modifiers 提供的信息移动光标。
另请参阅 QAbstractItemView::CursorAction 。
[override virtual protected] void QTableView::paintEvent(QPaintEvent *event)
重写:QAbstractScrollArea::paintEvent(QPaintEvent *event)。
在接收到给定的绘制事件event 时,绘制表格。
[slot] void QTableView::resizeColumnToContents(int column)
根据用于渲染该列中每个项的委托所提供的尺寸提示,调整给定的column 的大小。
注意:仅 可见列会进行调整大小。若要同时调整隐藏列的大小,请重写sizeHintForColumn()方法。
另请参阅 resizeColumnsToContents()、sizeHintForColumn() 以及QHeaderView::resizeContentsPrecision()。
[slot] void QTableView::resizeColumnsToContents()
根据用于渲染各列中每个项目的委托的大小提示,调整所有列的大小。
另请参阅 resizeColumnToContents()、sizeHintForColumn() 和QHeaderView::resizeContentsPrecision()。
[slot] void QTableView::resizeRowToContents(int row)
根据用于渲染行中每个项目的委托所提供的尺寸提示,调整给定row 的大小。
另请参阅 resizeRowsToContents()、sizeHintForRow() 和QHeaderView::resizeContentsPrecision()。
[slot] void QTableView::resizeRowsToContents()
根据用于渲染行中每个项目的委托的大小提示,调整所有行的大小。
另请参阅 resizeRowToContents()、sizeHintForRow() 和QHeaderView::resizeContentsPrecision()。
int QTableView::rowAt(int y) const
返回内容坐标系中给定 y 坐标(y )所在的行。
注意: 如果给定的坐标无效(不存在该行),则该 函数返回 -1。
另请参阅 columnAt()。
[protected slot] void QTableView::rowCountChanged(int oldCount, int newCount)
每当添加或删除行时,都会调用此回调函数。之前的行数由 `oldCount` 指定,新的行数由 `newCount` 指定。
int QTableView::rowHeight(int row) const
返回给定row 的高。
另请参阅 setRowHeight()、resizeRowToContents() 以及columnWidth()。
[protected slot] void QTableView::rowMoved(int row, int oldIndex, int newIndex)
调用此插槽可更改表视图中给定row 的索引。旧索引由oldIndex 指定,新索引由newIndex 指定。
另请参阅 columnMoved()。
[protected slot] void QTableView::rowResized(int row, int oldHeight, int newHeight)
调用此插槽可更改给定row 的高度。旧高度由oldHeight 指定,新高度由newHeight 指定。
另请参阅 columnResized()。
int QTableView::rowSpan(int row, int column) const
返回位于 (row,column) 处表元素的行跨度。默认值为 1。
另请参阅 setSpan() 和columnSpan()。
int QTableView::rowViewportPosition(int row) const
返回给定row 在内容坐标系中的y坐标。
[override virtual protected] void QTableView::scrollContentsBy(int dx, int dy)
重写:QAbstractScrollArea::scrollContentsBy(int dx, int dy)。
通过 (dx,dy) 滚动表视图中的内容。
[override virtual] void QTableView::scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = EnsureVisible)
重写了:QAbstractItemView::scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint)。
确保给定的index 在表格视图中可见,必要时进行滚动。
[slot] void QTableView::selectColumn(int column)
如果当前的 SelectionMode 和 SelectionBehavior 允许选择列,则在表视图中选择指定的column 。
另请参阅 selectRow()。
[slot] void QTableView::selectRow(int row)
如果当前的 SelectionMode 和 SelectionBehavior 允许选择行,则在表格视图中选中给定的row 。
另请参阅 selectColumn()。
[override virtual protected] QModelIndexList QTableView::selectedIndexes() const
重新实现了:QAbstractItemView::selectedIndexes() const。
[override virtual protected] void QTableView::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
重写了:QAbstractItemView::selectionChanged (const QItemSelection &selected, const QItemSelection &deselected)。
void QTableView::setColumnHidden(int column, bool hide)
如果hide 为真,则指定的column 将被隐藏;否则将显示。
另请参阅 isColumnHidden() 和setRowHidden()。
void QTableView::setColumnWidth(int column, int width)
将给定的column 的宽度设置为width 。
另请参阅 columnWidth()。
void QTableView::setHorizontalHeader(QHeaderView *header)
将水平标题栏使用的控件设置为header 。
另请参阅 horizontalHeader() 和setVerticalHeader()。
[override virtual] void QTableView::setModel(QAbstractItemModel *model)
重写了:QAbstractItemView::setModel(QAbstractItemModel *model)。
[override virtual] void QTableView::setRootIndex(const QModelIndex &index)
重写了:QAbstractItemView::setRootIndex(const QModelIndex &index)。
void QTableView::setRowHeight(int row, int height)
将给定的row 的高度设置为height 。
另请参阅 rowHeight()。
void QTableView::setRowHidden(int row, bool hide)
如果hide 为真,则row 将被隐藏;否则将显示。
另请参阅 isRowHidden() 和setColumnHidden()。
[override virtual protected] void QTableView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags)
重写了:QAbstractItemView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags)。
根据给定的rect 以及指定的选择flags ,选中其中的项目。
[override virtual] void QTableView::setSelectionModel(QItemSelectionModel *selectionModel)
重写了:QAbstractItemView::setSelectionModel(QItemSelectionModel *selectionModel)。
void QTableView::setSortingEnabled(bool enable)
如果enable 为真,则启用该表的排序功能,并立即调用sortByColumn(),传入当前的排序段和排序顺序
注意: 这是属性sortingEnabled 的设置 函数。
另请参阅 isSortingEnabled()。
void QTableView::setSpan(int row, int column, int rowSpanCount, int columnSpanCount)
将表格元素 (row,column) 的范围设置为由 (rowSpanCount,columnSpanCount) 指定的行数和列数。
另请参阅 rowSpan() 和columnSpan()。
void QTableView::setVerticalHeader(QHeaderView *header)
将垂直标题栏要使用的控件设置为header 。
另请参阅 verticalHeader() 和setHorizontalHeader()。
[slot] void QTableView::showColumn(int column)
证明给定的column 。
另请参阅 hideColumn() 和showRow()。
[slot] void QTableView::showRow(int row)
证明给定的row 。
另请参阅 hideRow() 和showColumn()。
[override virtual protected] int QTableView::sizeHintForColumn(int column) const
重写:QAbstractItemView::sizeHintForColumn(int column) const。
返回给定 `column` 宽度的尺寸提示,若无模型则返回 -1。
如果需要将给定列的宽度设置为固定值,请在表的水平表头处调用QHeaderView::resizeSection()。
如果您在子类中重写此函数,请注意,当调用resizeColumnToContents() 或QHeaderView::resizeSections() 时,将使用您返回的值。如果水平标题或项目委托要求更大的列宽,则将使用较大的宽度。
另请参阅 QWidget::sizeHint 、horizontalHeader() 和QHeaderView::resizeContentsPrecision()。
[override virtual protected] int QTableView::sizeHintForRow(int row) const
重写了:QAbstractItemView::sizeHintForRow(int row) const。
返回给定row 高度的大小提示,若无模型则返回-1。
如果需要将给定行的高度设置为固定值,请在表的垂直标题上调用QHeaderView::resizeSection()。
若在子类中重写此函数,请注意:您返回的值仅在调用 `resizeRowToContents()` 时才会被使用。在这种情况下,如果垂直标题或项目委托要求更大的行高,则将使用该宽度值。
另请参阅 QWidget::sizeHint 、verticalHeader() 和QHeaderView::resizeContentsPrecision()。
[slot] void QTableView::sortByColumn(int column, Qt::SortOrder order)
根据给定的column 和order 中的值对模型进行排序。
column 该值可以是 -1,此时不会显示任何排序标记,模型将恢复到其自然、未排序的顺序。请注意,并非所有模型都支持此功能,甚至可能在此情况下发生崩溃。
另请参阅 sortingEnabled 。
[override virtual protected] void QTableView::timerEvent(QTimerEvent *event)
重写了:QAbstractItemView::timerEvent(QTimerEvent *event)。
[override virtual protected] void QTableView::updateGeometries()
重写了:QAbstractItemView::updateGeometries()。
QHeaderView *QTableView::verticalHeader() const
返回表格视图的垂直标题栏。
另请参阅 setVerticalHeader()、horizontalHeader() 和QAbstractItemModel::headerData()。
[override virtual protected] int QTableView::verticalOffset() const
重写了:QAbstractItemView::verticalOffset() const。
返回表格视图中项目的垂直偏移量。
请注意,表格视图使用垂直标题区的位置来确定视图中各行的位置。
另请参阅 horizontalOffset()。
[override virtual protected] QSize QTableView::viewportSizeHint() const
重新实现了:QAbstractItemView::viewportSizeHint() const。
[override virtual] QRect QTableView::visualRect(const QModelIndex &index) const
重写:QAbstractItemView::visualRect(const QModelIndex &index) const。
返回给定的index 在视口中所占的矩形区域。如果该索引在视图中被隐藏,则返回空的QRect 。
[override virtual protected] QRegion QTableView::visualRegionForSelection(const QItemSelection &selection) const
重写:QAbstractItemView::visualRegionForSelection(const QItemSelection &selection) const。
返回给定 `selection` 中各项在视口内的矩形区域。
自 4.7 版本起,返回的区域仅包含与视口相交(或被视口包含)的矩形。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.
