一.定义
QTableWidget是一个用于显示表格数据的Qt控件,它是一个基于Qt Model/View框架的视图组件。QTableWidget提供了一种简单的方式来展示和编辑表格数据,用户可以通过添加行、列和单元格来构建一个完整的数据表格。
下面是一些QTableWidget的主要特点和功能:
显示数据:QTableWidget可以显示表格形式的数据,用户可以通过设置行数、列数和单元格内容来展示具体的数据。
编辑数据:用户可以在QTableWidget中直接编辑单元格的内容,以便对数据进行修改。
行列操作:用户可以通过API添加、删除、移动行列,来灵活地管理数据表格的结构。
布局调整:用户可以通过设置行高、列宽、单元格合并等方式来调整数据表格的布局。
选中操作:用户可以通过鼠标或键盘操作来选中单元格、行或列,以便进行相关的操作。
样式设置:用户可以通过设置表格的样式、颜色、字体等属性来美化表格的显示效果。
数据导出:QTableWidget支持将表格数据导出为文件(如CSV格式),以便用户进行其他处理或分享数据。
二.代码示例
#include <QtWidgets>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建一个QTableWidget对象,并设置行数和列数
QTableWidget tableWidget;
tableWidget.setRowCount(3);
tableWidget.setColumnCount(2);
// 设置表头
QStringList headers;
headers << "Name" << "Age";
tableWidget.setHorizontalHeaderLabels(headers);
// 向表格中添加数据
QTableWidgetItem *item1 = new QTableWidgetItem("Alice");
tableWidget.setItem(0, 0, item1);
QTableWidgetItem *item2 = new QTableWidgetItem("25");
tableWidget.setItem(0, 1, item2);
QTableWidgetItem *item3 = new QTableWidgetItem("Bob");
tableWidget.setItem(1, 0, item3);
QTableWidgetItem *item4 = new QTableWidgetItem("30");
tableWidget.setItem(1, 1, item4);
QTableWidgetItem *item5 = new QTableWidgetItem("Eve");
tableWidget.setItem(2, 0, item5);
QTableWidgetItem *item6 = new QTableWidgetItem("22");
tableWidget.setItem(2, 1, item6);
// 显示表格
tableWidget.show();
return app.exec();
}
三.部分功能介绍
1.设置行高
#include <QtWidgets>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建一个QTableWidget对象,并设置行数和列数
QTableWidget tableWidget;
tableWidget.setRowCount(3);
tableWidget.setColumnCount(2);
// 设置表格每一行的高度
tableWidget.verticalHeader()->setDefaultSectionSize(50); // 设置行高为50像素
// 添加数据到表格中
// 显示表格
tableWidget.show();
return app.exec();
}
2.设置自适应大小
setSizeAdjustPolicy()方法是用于设置QTableWidget的自适应策略的方法。可以通过该方法设置表格的大小自适应方式,以确保表格可以根据内容调整大小。
以下是该方法的常用参数:
- QTableWidget::AdjustToContents:根据内容自动调整表格大小。
- QTableWidget::AdjustToContentsOnFirstShow:第一次显示时根据内容自动调整表格大小。
- QTableWidget::AdjustToContentsOnResize:调整表格大小以适应内容变化。
- QTableWidget::Fixed:固定大小。
#include <QtWidgets>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建一个QTableWidget对象,并设置行数和列数
QTableWidget tableWidget;
tableWidget.setRowCount(3);
tableWidget.setColumnCount(2);
// 设置表格每一行的高度
tableWidget.verticalHeader()->setDefaultSectionSize(50); // 设置行高为50像素
// 设置表格的自适应策略
tableWidget.setSizeAdjustPolicy(QTableWidget::AdjustToContents);
// 添加数据到表格中
// 显示表格
tableWidget.show();
return app.exec();
}
3.插入数据
Qt中的 QTableWidget 类提供了方便的方法来插入和操作表格中的行和列,而您无需手动设置行号。当您向 QTableWidget 插入行时,会自动更新当前的行号,并且您可以通过该行号来访问和操作该行的数据。
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建 QTableWidget
QTableWidget tableWidget;
tableWidget.setColumnCount(2);
// 插入一行并设置数据
tableWidget.insertRow(0);
tableWidget.setItem(0, 0, new QTableWidgetItem("Row 1, Column 1"));
tableWidget.setItem(0, 1, new QTableWidgetItem("Row 1, Column 2"));
// 插入另一行并设置数据
tableWidget.insertRow(1);
tableWidget.setItem(1, 0, new QTableWidgetItem("Row 2, Column 1"));
tableWidget.setItem(1, 1, new QTableWidgetItem("Row 2, Column 2"));
// 显示 QTableWidget
tableWidget.show();
return app.exec();
}
4.设置文字居中
要设置表格单元格中的文字居中,可以使用
setAlignment()
方法来指定单元格的对齐方式。
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
from PyQt5.QtCore import Qt
app = QApplication([])
tableWidget = QTableWidget()
tableWidget.setRowCount(2)
tableWidget.setColumnCount(2)
tableWidget.setItem(0, 0, QTableWidgetItem("Item 1"))
tableWidget.setItem(0, 1, QTableWidgetItem("Item 2"))
tableWidget.setItem(1, 0, QTableWidgetItem("Item 3"))
tableWidget.setItem(1, 1, QTableWidgetItem("Item 4"))
# 设置单元格文字居中
for i in range(tableWidget.rowCount()):
for j in range(tableWidget.columnCount()):
item = tableWidget.item(i, j)
item.setTextAlignment(Qt.AlignCenter)
widget = QWidget()
layout = QVBoxLayout()
layout.addWidget(tableWidget)
widget.setLayout(layout)
widget.show()
app.exec_()
5.设置是否可编辑
要设置Qt TableWidget中的单元格为可编辑或不可编辑模式,可以使用
setEditTriggers()
方法。以下是一个示例代码,演示如何设置单元格为可编辑
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget, QAbstractItemView
app = QApplication([])
tableWidget = QTableWidget()
tableWidget.setRowCount(2)
tableWidget.setColumnCount(2)
tableWidget.setItem(0, 0, QTableWidgetItem("Editable"))
tableWidget.setItem(0, 1, QTableWidgetItem("Not Editable"))
tableWidget.setItem(1, 0, QTableWidgetItem("Editable"))
tableWidget.setItem(1, 1, QTableWidgetItem("Not Editable"))
# 设置第一列为可编辑模式,第二列为不可编辑模式
tableWidget.setEditTriggers(QAbstractItemView.DoubleClicked) # 设置双击可编辑
widget = QWidget()
layout = QVBoxLayout()
layout.addWidget(tableWidget)
widget.setLayout(layout)
widget.show()
app.exec_()