QTableWidget Class

QTableWidget 类提供了一个具有默认模型的基于项目的表格视图。更多

Header: #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 setVerticalHeaderItem(int row, QTableWidgetItem *item)
void setVerticalHeaderLabels(const QStringList &labels)
void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder)
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);

如果想在表格 widget 中启用排序功能,请在填充项目后再启用,否则排序可能会影响插入顺序(详情请参见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)

成员函数文档

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

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

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

使用给定的rowscolumns 以及给定的parent 创建新表视图。

[virtual noexcept] QTableWidget::~QTableWidget()

摧毁QTableWidget.

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

rowcolumn 指定的单元格被激活时,会发出该信号

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

rowcolumn 指定的单元格中的项目数据发生变化时,就会发出该信号。

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

每当点击表格中的一个单元格时,就会发出该信号。rowcolumn 指定的是被点击的单元格。

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

每当表格中的某个单元格被双击时,就会发出该信号。指定的rowcolumn 是被双击的单元格。

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

当鼠标光标进入一个单元格时会发出该信号。单元格由rowcolumn 指定。

只有在打开 mouseTracking 或在移动到一个项目时按下鼠标按钮时,才会发出该信号。

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

每当表格中的一个单元格被按下时,就会发出该信号。rowcolumn 指定的是被按下的单元格。

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

在给定的rowcolumn 中,返回单元格中显示的 widget。

注: 表格拥有 widget 的所有权。

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

每当当前单元格发生变化时,就会发出该信号。previousRowpreviousColumn 指定的单元格是之前拥有焦点的单元格,currentRowcurrentColumn 指定的单元格是新的当前单元格。

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)

在给定的rowcolumn 中处理以给定的action 结束的拖放操作所提供的data 。如果模型可以处理数据和操作,则返回true ;否则返回false

另请参阅 supportedDropActions()。

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

注: 在 5.10 之前的 Qt 版本中,该函数使用非const item

[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

如果已设置rowcolumn ,则返回给定 和 的项目;否则返回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

返回在表格 widget 坐标系中与QPoint(ax,ay) 相对应位置上的项目,如果指定点没有被表格 widget 中的项目覆盖,则返回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 是进入的项目。

该信号只有在打开 mouseTracking(鼠标跟踪)或在移动到一个项目时按下鼠标按钮时才会发出。

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

返回可用于描述 tablewidget 项目列表的 MIME 类型列表。

另请参见 mimeData()。

void QTableWidget::openPersistentEditor(QTableWidgetItem *item)

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

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

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

删除rowcolumn 所指示单元格中设置的 widget。

[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 设置为显示在给定的rowcolumn 的单元格中,并将 Widget 的所有权传递给表格。

如果单元格部件 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)

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

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

void QTableWidget::setCurrentItem(QTableWidgetItem *item)

将当前项目设置为item

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

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

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

使用给定的command 设置当前项目为item

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

将给定的rowcolumn 的项目设置为item

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

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

如果要对某一行中的多个项目进行设置(例如,在循环中调用 setItem()),可以先关闭排序,然后再打开;这样就可以对同一行中的所有项目使用相同的row 参数(即 setItem() 不会移动该行)。

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

void QTableWidget::setItemPrototype(const QTableWidgetItem *item)

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

当需要创建新的表格项目时,表格 widget 将使用项目原型克隆功能。例如,当用户在空单元格中进行编辑时。当您有一个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)

根据columnorder 对表格 widget 中的所有行排序。

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

返回此视图支持的下拉操作。

另请参阅 Qt::DropActions

QTableWidgetItem *QTableWidget::takeHorizontalHeaderItem(int column)

column 处的横向页眉项从页眉中移除,但不删除。

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

从表rowcolumn 中删除项目,但不删除该项目。

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 的视觉行。

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