本页内容

QTableView Class

QTableView 类提供了一个表格视图的默认模型/视图实现。更多内容...

头文件: #include <QTableView>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承自: QAbstractItemView
被继承者:

QTableWidget

属性

公共函数

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 &current, 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。

另请参阅 setSpan() 和rowSpan()。

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 &current, const QModelIndex &previous)

重写自:QAbstractItemView::currentChanged (const QModelIndex &current, 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.