QTableView Class
QTableView 类提供了表格视图的默认模型/视图实现。更多
Header: | #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() 函数为特定索引设置 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。
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() 常量。
返回表格视图中项目的水平偏移量。
请注意,表格视图使用水平标题部分的位置来确定视图中列的位置。
另请参阅 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::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() 常量。
返回表格视图中项目的垂直偏移量。
请注意,表格视图使用垂直标题部分的位置来确定视图中各行的位置。
另请参阅 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.