qt QTableWidget总结

基本用法

创建和设置

#include <QTableWidget>

QTableWidget *tableWidget = new QTableWidget(rows, columns, parent);
  • rows 和 columns 分别指定表格的行数和列数。

  • parent 是父窗口部件,通常是一个 QWidget 或 QMainWindow。

设置表头

tableWidget->setHorizontalHeaderLabels(QStringList() << "Column 1" << "Column 2");
tableWidget->setVerticalHeaderLabels(QStringList() << "Row 1" << "Row 2");
  • setHorizontalHeaderLabels 设置水平表头。

  • setVerticalHeaderLabels 设置垂直表头

添加数据

QTableWidgetItem *item = new QTableWidgetItem("Data");
tableWidget->setItem(row, column, item);
  • setItem 方法用于在指定行和列设置数据项。

获取数据

QTableWidgetItem *item = tableWidget->item(row, column);
QString text = item->text();
  • item 方法获取指定位置的 QTableWidgetItem。

  • text 方法获取单元格的文本内容。

常用功能

设置单元格属性

item->setTextAlignment(Qt::AlignCenter); // 设置文本对齐方式
item->setBackground(Qt::yellow); // 设置背景颜色
item->setForeground(Qt::red); // 设置前景色(文本颜色)
item->setFlags(item->flags() | Qt::ItemIsEditable); // 设置单元格可编辑

调整行高和列宽

tableWidget->setRowHeight(row, height);
tableWidget->setColumnWidth(column, width);

选择模式

tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); // 单选
tableWidget->setSelectionMode(QAbstractItemView::MultiSelection); // 多选
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); // 选择整行
tableWidget->setSelectionBehavior(QAbstractItemView::SelectColumns); // 选择整列

排序

tableWidget->setSortingEnabled(true);
  • 启用排序功能后,用户可以点击表头进行排序。

信号与槽

单元格内容改变

connect(tableWidget, &QTableWidget::cellChanged, [](int row, int column) {
    qDebug() << "Cell changed at row:" << row << "column:" << column;
});

单元格被点击

connect(tableWidget, &QTableWidget::cellClicked, [](int row, int column) {
    qDebug() << "Cell clicked at row:" << row << "column:" << column;
});

单元格被双击

connect(tableWidget, &QTableWidget::cellDoubleClicked, [](int row, int column) {
    qDebug() << "Cell double-clicked at row:" << row << "column:" << column;
});

高级功能

自定义单元格控件

QComboBox *comboBox = new QComboBox();
comboBox->addItem("Option 1");
comboBox->addItem("Option 2");
tableWidget->setCellWidget(row, column, comboBox);
  • setCellWidget 方法可以在单元格中嵌入其他控件,如 QComboBox、QSpinBox 等。

合并单元格

tableWidget->setSpan(row, column, rowSpan, columnSpan);
  • setSpan 方法用于合并单元格,rowSpan 和 columnSpan 分别指定合并的行数和列数。

自定义表头

QHeaderView *header = tableWidget->horizontalHeader();
header->setSectionResizeMode(QHeaderView::Stretch); // 自动调整列宽
header->setDefaultAlignment(Qt::AlignCenter); // 设置表头文本对齐方式

注意事项

  • QTableWidget 适合处理小型数据集,对于大型数据集,建议使用 QTableView 和自定义模型。

  • 频繁操作表格数据时,建议使用 blockSignals(true) 来暂时禁用信号,以提高性能。

示例代码

#include <QApplication>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QHeaderView>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QTableWidget tableWidget(3, 3);
    tableWidget.setHorizontalHeaderLabels(QStringList() << "A" << "B" << "C");
    tableWidget.setVerticalHeaderLabels(QStringList() << "1" << "2" << "3");

    for (int row = 0; row < 3; ++row) {
        for (int col = 0; col < 3; ++col) {
            QTableWidgetItem *item = new QTableWidgetItem(QString("R%1C%2").arg(row + 1).arg(col + 1));
            tableWidget.setItem(row, col, item);
        }
    }

    tableWidget.setSortingEnabled(true);
    tableWidget.show();

    return app.exec();
}

总结

QTableWidget 是一个功能强大且易于使用的表格控件,适合处理小型数据集。通过灵活的设置和信号槽机制,可以实现丰富的交互功能。对于更复杂的场景,建议结合 QTableView 和自定义模型来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

enyp80

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值