本页内容

QTableWidget Class

QTableWidget 类提供了一个基于项的表格视图,并附带一个默认模型。更多内容...

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

属性

公共函数

QTableWidget(QWidget *parent = nullptr)
QTableWidget(int rows, int columns, QWidget *parent = nullptr)
virtual ~QTableWidget()
QWidget *cellWidget(int row, int column) const
void closePersistentEditor(QTableWidgetItem *item)
int column(const QTableWidgetItem *item) const
int columnCount() const
int currentColumn() const
QTableWidgetItem *currentItem() const
int currentRow() const
void editItem(QTableWidgetItem *item)
QList<QTableWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags) const
QTableWidgetItem *horizontalHeaderItem(int column) const
QModelIndex indexFromItem(const QTableWidgetItem *item) const
bool isPersistentEditorOpen(QTableWidgetItem *item) const
QTableWidgetItem *item(int row, int column) const
QTableWidgetItem *itemAt(const QPoint &point) const
QTableWidgetItem *itemAt(int ax, int ay) const
QTableWidgetItem *itemFromIndex(const QModelIndex &index) const
const QTableWidgetItem *itemPrototype() const
QList<QTableWidgetItem *> items(const QMimeData *data) const
void openPersistentEditor(QTableWidgetItem *item)
void removeCellWidget(int row, int column)
int row(const QTableWidgetItem *item) const
int rowCount() const
QList<QTableWidgetItem *> selectedItems() const
QList<QTableWidgetSelectionRange> selectedRanges() const
void setCellWidget(int row, int column, QWidget *widget)
void setColumnCount(int columns)
void setCurrentCell(int row, int column)
void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command)
void setCurrentItem(QTableWidgetItem *item)
void setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command)
void setHorizontalHeaderItem(int column, QTableWidgetItem *item)
void setHorizontalHeaderLabels(const QStringList &labels)
void setItem(int row, int column, QTableWidgetItem *item)
void setItemPrototype(const QTableWidgetItem *item)
void setRangeSelected(const QTableWidgetSelectionRange &range, bool select)
void setRowCount(int rows)
void setSupportedDragActions(Qt::DropActions actions)
void setVerticalHeaderItem(int row, QTableWidgetItem *item)
void setVerticalHeaderLabels(const QStringList &labels)
void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder)
Qt::DropActions supportedDragActions() const
QTableWidgetItem *takeHorizontalHeaderItem(int column)
QTableWidgetItem *takeItem(int row, int column)
QTableWidgetItem *takeVerticalHeaderItem(int row)
QTableWidgetItem *verticalHeaderItem(int row) const
int visualColumn(int logicalColumn) const
QRect visualItemRect(const QTableWidgetItem *item) const
int visualRow(int logicalRow) const

公共槽位

void clear()
void clearContents()
void insertColumn(int column)
void insertRow(int row)
void removeColumn(int column)
void removeRow(int row)
void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)

信号

void cellActivated(int row, int column)
void cellChanged(int row, int column)
void cellClicked(int row, int column)
void cellDoubleClicked(int row, int column)
void cellEntered(int row, int column)
void cellPressed(int row, int column)
void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
void itemActivated(QTableWidgetItem *item)
void itemChanged(QTableWidgetItem *item)
void itemClicked(QTableWidgetItem *item)
void itemDoubleClicked(QTableWidgetItem *item)
void itemEntered(QTableWidgetItem *item)
void itemPressed(QTableWidgetItem *item)
void itemSelectionChanged()

受保护函数

virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action)
virtual QMimeData *mimeData(const QList<QTableWidgetItem *> &items) const
virtual QStringList mimeTypes() const
virtual Qt::DropActions supportedDropActions() const

重新实现的受保护函数

virtual void dropEvent(QDropEvent *event) override
virtual bool event(QEvent *e) override

详细说明

月份与金额对照表

表格控件为应用程序提供了标准的表格显示功能。QTableWidget 中的项目由QTableWidgetItem 提供。

若需创建使用自定义数据模型的表格,应使用QTableView 而非本类。

表格控件可以指定所需的行数和列数进行创建:

tableWidget = new QTableWidget(12, 3, this);

或者,也可以不指定大小来创建表格,并在后续调整其大小:

tableWidget = new QTableWidget(this);
tableWidget->setRowCount(10);
tableWidget->setColumnCount(5);

项目在表格外部创建(无父控件),并通过 `setItem()` 插入到表格中:

QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(
    (row+1)*(column+1)));
tableWidget->setItem(row, column, newItem);

若要在表格控件中启用排序功能,请在向其中填充项目后进行,否则排序可能会干扰插入顺序(详情请参阅setItem())。

表格可以同时设置水平和垂直标题。创建标题最简单的方法是向setHorizontalHeaderLabels() 和setVerticalHeaderLabels() 函数提供一个字符串列表。这些函数将为表格的列和行提供简单的文本标题。 更复杂的表头可以基于现有的表格项创建,这些表格项通常在表格外部构建。例如,我们可以构建一个包含图标和对齐文本的表格项,并将其用作特定列的表头:

QTableWidgetItem *cubesHeaderItem = new QTableWidgetItem(tr("Cubes"));
cubesHeaderItem->setIcon(QIcon(QPixmap(":/Images/cubed.png")));
cubesHeaderItem->setTextAlignment(Qt::AlignVCenter);

可以通过rowCount() 获取表格的行数,通过columnCount() 获取列数。可使用clear() 函数清空表格。

另请参阅 QTableWidgetItem 、QTableView 以及模型/视图编程。

属性文档

columnCount : int

该属性存储表中的列数

默认情况下,对于未指定行数和列数的表,该属性的值为 0。

访问函数:

int columnCount() const
void setColumnCount(int columns)

rowCount : int

该属性存储表中的行数

默认情况下,对于未指定行数和列数的表,该属性的值为 0。

访问函数:

int rowCount() const
void setRowCount(int rows)

[since 6.10] supportedDragActions : Qt::DropActions

该属性存储了此视图支持的拖动操作

该枚举在 Qt 6.10 中引入。

访问函数:

Qt::DropActions supportedDragActions() const
void setSupportedDragActions(Qt::DropActions actions)

另请参阅 Qt::DropActions 和supportedDropActions()。

成员函数文档

[explicit] QTableWidget::QTableWidget(QWidget *parent = nullptr)

使用给定的parent 创建一个新的表格视图。

QTableWidget::QTableWidget(int rows, int columns, QWidget *parent = nullptr)

创建一个新的表格视图,该视图使用给定的rows 和columns ,并具有给定的parent 。

[virtual noexcept] QTableWidget::~QTableWidget()

删除此链接:QTableWidget 。

[signal] void QTableWidget::cellActivated(int row, int column)

当由 `row ` 和 `column ` 指定的单元被激活时,会触发此信号

[signal] void QTableWidget::cellChanged(int row, int column)

每当由 `row ` 和 `column ` 指定的单元格中项的数据发生变化时,都会触发此信号。

[signal] void QTableWidget::cellClicked(int row, int column)

每当表格中的某个单元格被点击时,都会触发此信号。指定的row 和column 即为被点击的单元格。

[signal] void QTableWidget::cellDoubleClicked(int row, int column)

每当表中的某个单元格被双击时,都会触发此信号。指定的row 和column 即为被双击的单元格。

[signal] void QTableWidget::cellEntered(int row, int column)

当鼠标光标进入某个单元格时,会触发此信号。该单元格由row 和column 指定。

仅当启用了 mouseTracking 功能,或者在鼠标移动到某个项目上时按下鼠标按钮时,才会触发此信号。

[signal] void QTableWidget::cellPressed(int row, int column)

每当表格中的某个单元格被点击时,都会触发此信号。指定的row 和column 即为被点击的单元格。

QWidget *QTableWidget::cellWidget(int row, int column) const

返回在给定的row 和column 中单元格内显示的小部件。

注意:表格 将拥有该小部件的所有权。

另请参阅 setCellWidget()。

[slot] void QTableWidget::clear()

清除视图中的所有项目。这也会清除所有选中项和表头。如果不想清除表头,请使用QTableWidget::clearContents()。表格尺寸保持不变。

[slot] void QTableWidget::clearContents()

从视图中移除所有不在表头中的项目。此操作还将清除所有选中项。表格尺寸保持不变。

void QTableWidget::closePersistentEditor(QTableWidgetItem *item)

关闭item 的持久化编辑器。

另请参阅 openPersistentEditor() 和isPersistentEditorOpen()。

int QTableWidget::column(const QTableWidgetItem *item) const

返回item 对应的列。

int QTableWidget::columnCount() const

返回列的数量。

注意: 这是 columnCount 属性的获取器 函数。

另请参阅 setColumnCount()。

[signal] void QTableWidget::currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)

每当当前单元格发生变化时,都会触发此信号。由previousRow 和previousColumn 指定的单元格是之前拥有焦点的单元格,由currentRow 和currentColumn 指定的单元格是新的当前单元格。

int QTableWidget::currentColumn() const

返回当前项目的列。

另请参阅 currentRow() 和setCurrentCell()。

QTableWidgetItem *QTableWidget::currentItem() const

返回当前项目。

另请参阅 setCurrentItem()。

[signal] void QTableWidget::currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)

每当当前项目发生变化时,都会触发此信号。previous 表示之前拥有焦点的项目,current 表示新的当前项目。

int QTableWidget::currentRow() const

返回当前项目的行号。

另请参阅 currentColumn() 和setCurrentCell()。

[override virtual protected] void QTableWidget::dropEvent(QDropEvent *event)

重写了:QTableView::dropEvent(QDropEvent *event)。

[virtual protected] bool QTableWidget::dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action)

处理由拖放操作提供的data 对象,该操作在给定的row 和column 中以给定的action 结束。如果模型能够处理该数据和操作,则返回true ;否则返回false 。

另请参阅 supportedDropActions() 和supportedDragActions 。

void QTableWidget::editItem(QTableWidgetItem *item)

如果item 文件可编辑,则开始对其进行编辑。

[override virtual protected] bool QTableWidget::event(QEvent *e)

重写了:QAbstractItemView::event(QEvent *event)。

QList<QTableWidgetItem *> QTableWidget::findItems(const QString &text, Qt::MatchFlags flags) const

使用给定的flags ,查找与text 匹配的条目。

QTableWidgetItem *QTableWidget::horizontalHeaderItem(int column) const

返回列column 的水平标题项(如果已设置);否则返回nullptr 。

另请参阅 setHorizontalHeaderItem()。

QModelIndex QTableWidget::indexFromItem(const QTableWidgetItem *item) const

返回与给定的item 相关的QModelIndex 。

注意:在 Qt 5.10 之前的版本中,此函数接受的item 不是const 。

[slot] void QTableWidget::insertColumn(int column)

在column 处的表中插入一列空列。

[slot] void QTableWidget::insertRow(int row)

在row 处的表中插入一行空数据。

bool QTableWidget::isPersistentEditorOpen(QTableWidgetItem *item) const

返回是否为项目item 打开了持久化编辑器。

另请参阅 openPersistentEditor() 和closePersistentEditor()。

QTableWidgetItem *QTableWidget::item(int row, int column) const

返回给定row 对应的项,以及column (若已设置);否则返回nullptr 。

另请参阅 setItem()。

[signal] void QTableWidget::itemActivated(QTableWidgetItem *item)

当指定的item 被激活时,会发出此信号

QTableWidgetItem *QTableWidget::itemAt(const QPoint &point) const

返回指向位于指定point 处的项的指针;如果point 未被表控件中的任何项覆盖,则返回nullptr 。

另请参阅 item()。

QTableWidgetItem *QTableWidget::itemAt(int ax, int ay) const

返回在表格控件坐标系中位于QPoint (ax ,ay )对应位置的项目;如果指定点不在表格控件中的任何项目覆盖范围内,则返回nullptr 。

另请参阅 item()。

[signal] void QTableWidget::itemChanged(QTableWidgetItem *item)

每当item 的数据发生变化时,都会触发此信号。

[signal] void QTableWidget::itemClicked(QTableWidgetItem *item)

每当表中的某个项目被点击时,都会触发此信号。指定的item 即为被点击的项目。

[signal] void QTableWidget::itemDoubleClicked(QTableWidgetItem *item)

每当表中的某项被双击时,都会触发此信号。指定的item 即为被双击的项。

[signal] void QTableWidget::itemEntered(QTableWidgetItem *item)

当鼠标光标进入某个项目时,会触发此信号。item 即为被光标进入的项目。

仅当启用鼠标跟踪功能时,或者在鼠标移动进入项目时按下鼠标按钮时,才会发出此信号。

QTableWidgetItem *QTableWidget::itemFromIndex(const QModelIndex &index) const

返回指向与给定的index 关联的QTableWidgetItem 的指针。

[signal] void QTableWidget::itemPressed(QTableWidgetItem *item)

每当表中的某个项目被点击时,都会触发此信号。指定的item 即为被点击的项目。

const QTableWidgetItem *QTableWidget::itemPrototype() const

返回该表格所使用的项目原型。

另请参阅 setItemPrototype()。

[signal] void QTableWidget::itemSelectionChanged()

每当选择内容发生变化时,都会发出此信号。

另请参阅 selectedItems() 和QTableWidgetItem::isSelected()。

QList<QTableWidgetItem *> QTableWidget::items(const QMimeData *data) const

返回一个包含指向data 对象中所含项的指针的列表。如果该对象并非由同一进程中的QTreeWidget 创建的,则该列表为空。

[virtual protected] QMimeData *QTableWidget::mimeData(const QList<QTableWidgetItem *> &items) const

返回一个包含指定items 的序列化描述的对象。用于描述项的格式来自mimeTypes()函数。

如果项目列表为空,则返回nullptr ,而不是序列化的空列表。

[virtual protected] QStringList QTableWidget::mimeTypes() const

返回一个 MIME 类型列表,可用于描述一组 tablewidget 项。

另请参阅 mimeData()。

void QTableWidget::openPersistentEditor(QTableWidgetItem *item)

打开指定item 的编辑器。编辑完成后,编辑器仍保持打开状态。

另请参阅 closePersistentEditor() 和isPersistentEditorOpen()。

void QTableWidget::removeCellWidget(int row, int column)

移除由row 和column 指定的单元格上设置的小部件。

[slot] void QTableWidget::removeColumn(int column)

从表中删除列column 及其所有项目。

[slot] void QTableWidget::removeRow(int row)

从表中删除行row 及其所有项目。

int QTableWidget::row(const QTableWidgetItem *item) const

返回item 对应的行。

int QTableWidget::rowCount() const

返回行数。

注意: 这是 rowCount 属性的获取 函数。

另请参阅 setRowCount()。

[slot] void QTableWidget::scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)

在必要时滚动视图,以确保item 处于可见状态。hint 参数更精确地指定了操作完成后item 应位于何处。

QList<QTableWidgetItem *> QTableWidget::selectedItems() const

返回所有选定项的列表。

该函数返回一个指向所选单元格内容的指针列表。请使用selectedIndexes()函数来获取完整的选区(包括空单元格)。

另请参阅 selectedIndexes()。

QList<QTableWidgetSelectionRange> QTableWidget::selectedRanges() const

返回所有已选范围的列表。

另请参阅 QTableWidgetSelectionRange 。

void QTableWidget::setCellWidget(int row, int column, QWidget *widget)

将指定的widget 设置为在指定row 和column 中的单元格中显示,并将该控件的所有权移交给表格。

如果单元格控件 A 被单元格控件 B 替换,则单元格控件 A 将被删除。例如,在下面的代码片段中,QLineEdit 对象将被删除。

setCellWidget(row, column, new QLineEdit);
...
setCellWidget(row, column, new QTextEdit);

另请参阅 cellWidget()。

void QTableWidget::setColumnCount(int columns)

将该表模型的列数设置为columns 。如果该数值小于columnCount(),则会丢弃不需要的列中的数据。

注意: 这是属性columnCount 的设置 函数。

另请参阅 columnCount() 和setRowCount()。

void QTableWidget::setCurrentCell(int row, int column)

将当前单元格设置为位于位置 (row,column) 的单元格。

根据当前的selection mode ,该单元格也可能被选中。

另请参阅 setCurrentItem()、currentRow() 和currentColumn()。

void QTableWidget::setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command)

将当前单元格设置为位于位置 (row,column) 的单元格,并使用给定的command 。

另请参阅 setCurrentItem()、currentRow() 和currentColumn()。

void QTableWidget::setCurrentItem(QTableWidgetItem *item)

将当前项目设置为item 。

除非选择模式为NoSelection ,否则该项目也会被选中。

另请参阅 currentItem() 和setCurrentCell()。

void QTableWidget::setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command)

将当前项目设置为item ,并使用给定的command 。

另请参阅 currentItem() 和setCurrentCell()。

void QTableWidget::setHorizontalHeaderItem(int column, QTableWidgetItem *item)

将列column 的水平标题项设置为item 。如有必要,将增加列数以适应该标题项。之前的标题项(如有)将被删除。

另请参阅 horizontalHeaderItem()。

void QTableWidget::setHorizontalHeaderLabels(const QStringList &labels)

使用labels 设置水平标题标签。

void QTableWidget::setItem(int row, int column, QTableWidgetItem *item)

将给定的row 和column 对应的项设置为item 。

该表将获得该项的所有权。

请注意,如果启用了排序(参见sortingEnabled ),且column 是当前的排序列,则row 将被移动到由item 确定的排序位置。

如果您想设置特定行中的多个项目(例如,通过在循环中调用 setItem()),您可能需要在操作前关闭排序,并在操作后重新启用;这样您就可以对同一行中的所有项目使用相同的row 参数(即 setItem() 不会移动该行)。

另请参阅 item() 和takeItem()。

void QTableWidget::setItemPrototype(const QTableWidgetItem *item)

将表格的项目原型设置为指定的item 。

当表格控件需要创建新的表格项时(例如用户在空单元格中编辑时),将调用该项原型的克隆函数。当您拥有QTableWidgetItem 的子类,并希望确保QTableWidget 能创建该子类的实例时,此方法非常有用。

表格会接管原型的所有权。

另请参阅 itemPrototype()。

void QTableWidget::setRangeSelected(const QTableWidgetSelectionRange &range, bool select)

根据select ,选中或取消选中range 。

void QTableWidget::setRowCount(int rows)

将该表模型中的行数设置为rows 。如果该值小于rowCount(),则会丢弃不需要的行中的数据。

注意: 这是属性rowCount 的设置 函数。

另请参阅 rowCount() 和setColumnCount()。

void QTableWidget::setVerticalHeaderItem(int row, QTableWidgetItem *item)

将行row 的垂直标题项设置为item 。

另请参阅 verticalHeaderItem()。

void QTableWidget::setVerticalHeaderLabels(const QStringList &labels)

使用labels 设置垂直标题标签。

void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder)

根据column 和order 对表格控件中的所有行进行排序。

[virtual protected] Qt::DropActions QTableWidget::supportedDropActions() const

返回该视图支持的拖放操作。

另请参阅 Qt::DropActions 、supportedDragActions 以及dropMimeData()。

QTableWidgetItem *QTableWidget::takeHorizontalHeaderItem(int column)

从页眉中移除位于column 的水平页眉项目,但不将其删除。

QTableWidgetItem *QTableWidget::takeItem(int row, int column)

从表中移除位于row 和column 的条目,但不将其删除。

QTableWidgetItem *QTableWidget::takeVerticalHeaderItem(int row)

从页眉中移除位于row 处的垂直页眉项目,但不将其删除。

QTableWidgetItem *QTableWidget::verticalHeaderItem(int row) const

返回行row 对应的垂直标题项。

另请参阅 setVerticalHeaderItem()。

int QTableWidget::visualColumn(int logicalColumn) const

返回给定logicalColumn 的视觉列。

QRect QTableWidget::visualItemRect(const QTableWidgetItem *item) const

返回该项在视口内所占的矩形区域,坐标为item 。

int QTableWidget::visualRow(int logicalRow) const

返回给定logicalRow 的视觉行。

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