QTableView Class

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

Header: #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() 函数隐藏其中任何一个。每个标题的highlightSectionssectionsClickable 属性都设置为true

可以使用hideRow(),hideColumn(),showRow() 和showColumn() 隐藏和显示行和列。可以使用selectRow() 和selectColumn() 选择它们。表格将根据showGrid 属性显示网格。

表格视图中显示的项目与其他项目视图中的项目一样,都是使用标准delegates 渲染和编辑的。不过,对于某些任务来说,在表格中插入小部件有时会很有用。可使用setIndexWidget() 函数为特定索引设置 Widget,然后使用indexWidget() 检索 Widget。

默认情况下,表格中的单元格不会展开以填充可用空间。

您可以通过拉伸最后的标题部分来使单元格填满可用空间。使用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 插入。

访问函数:

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) 处表格元素的列跨度。默认值为 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() 常量。

返回表格视图中项目的水平偏移量。

请注意,表格视图使用水平标题部分的位置来确定视图中列的位置。

另请参阅 verticalOffset()。

[override virtual] QModelIndex QTableView::indexAt(const QPoint &pos) const

重实现:QAbstractItemView::indexAt(const QPoint &point) 常量。

返回与pos 位置的表项相对应的模型项的索引位置(以 contents 坐标表示)。

[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 为 true,给定的column 将被隐藏;否则将被显示。

另请参阅 isColumnHidden() 和setRowHidden()。

void QTableView::setColumnWidth(int column, int width)

设置column 的宽度为width

另请参阅 columnWidth() 。

void QTableView::setHorizontalHeader(QHeaderView *header)

将用于水平标题的 widget 设置为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 为 true,row 将被隐藏,否则将被显示。

另请参阅 isRowHidden() 和setColumnHidden()。

[override virtual protected] void QTableView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags)

重实现:QAbstractItemView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags)。

根据指定的选择flags ,在给定的rect 范围内选择项目。

[override virtual] void QTableView::setSelectionModel(QItemSelectionModel *selectionModel)

重实现:QAbstractItemView::setSelectionModel(QItemSelectionModel *selectionModel).

void QTableView::setSortingEnabled(bool enable)

如果enable 为 true,则启用表格排序,并立即使用当前排序段和顺序触发对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)

将用于垂直标题的 widget 设置为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::sizeHinthorizontalHeader() 和QHeaderView::resizeContentsPrecision()。

[override virtual protected] int QTableView::sizeHintForRow(int row) const

重实现:QAbstractItemView::sizeHintForRow(int row) const.

返回给定row 高度的尺寸提示,如果没有模型,则返回-1。

如果需要将给定行的高度设置为固定值,请在表格的垂直标题上调用QHeaderView::resizeSection() 。

如果在子类中重新实现该函数,请注意只有在调用resizeRowToContents() 时才会使用返回值。在这种情况下,如果垂直标题或项目委托需要更大的行高,则将使用该宽度。

另请参阅 QWidget::sizeHintverticalHeader() 和QHeaderView::resizeContentsPrecision()。

[slot] void QTableView::sortByColumn(int column, Qt::SortOrder order)

根据给定的columnorder 中的值对模型排序。

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() 常量。

返回表格视图中项目的垂直偏移量。

请注意,表格视图使用垂直标题部分的位置来确定视图中各行的位置。

另请参阅 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) 常量。

从视口返回给定selection 中项目的矩形。

自 4.7 版起,返回的区域只包含与视口相交(或包含在视口中)的矩形。

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