【Qt之模型视图】5. Qt库提供的视图便捷类-4. QTableWidget使用

时间:2024-02-01 20:22:30

QTableWidget是一个用于显示表格数据的小部件。它承自QTableView,并且提供了额外的功能,比如直接编辑单元格和插入/删除行和列。

其主要特性和使用方法如下:

  1. 表格结构:QTableWidget以行和列的形式组织数据,并可以动态添加或删除行和列。使用setRowCount()和setColumnCount()可以设置表格的行数和列数。

  2. 单元格内容:使用setItem()方法可以将一个QTableWidgetItem对象插入到特定的单元格中,以设置单元格的内容。可以使用QTableWidgetItem的setText()方法设置文本内容,或使用其他数据类型(如图标、颜色等)设置单元格的其他属性。

  3. 单元格编辑:可以在QTableWidget中直接编辑单元格的内容。可以通过设置setEditTriggers()方法来控制哪些单元格可以编辑,例如QAbstractItemView::NoEditTriggers表示所有单元格都不可编辑,而QAbstractItemView::CurrentChanged表示只有当前选中的单元格可编辑。

  4. 表头:QTableWidget可以显示表格的水平和垂直表头,分别对应于列和行。可以使用setHorizontalHeaderLabels()和setVerticalHeaderLabels()方法设置表头的文本。

  5. 选择:可以通过设置setSelectionMode()方法来设置选择模式。例如,选择模式可以是单行、多行、单列或多个单元格。还可以通过设置setSelectionBehavior()方法来控制选择行为,例如选择一整行或一整列。

  6. 排序和排序指示符:QTableWidget支持对表格数据进行排序,并在表头显示排序指示符。可以使用QTableWidget的sortItems()方法对指定列的数据进行排序,也可以通过setSortingEnabled()方法在表格上启用或禁用排序功能。

  7. 单元格合并:可以通过使用setSpan()方法将多个相邻的单元格合并成一个单元格。这在需要合并单元格的情况下提供了更灵活的布局选项。

  8. 数据导入和导出:QTableWidget提供了一些方法来导入和导出表格数据。可以使用setItem()方法将数据从一个模型或其他数据源导入到表格中,并使用item()方法从表格中获取数据。
    如:

    // 设置表格的行数和列数
    ui->tableWidget->setRowCount(5);
    ui->tableWidget->setColumnCount(3);

    // 设置选择行为和选择模式
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);

    // 设置表头
    ui->tableWidget->setHorizontalHeaderLabels({"列1", "列2", "列3"});

    // 向单元格中插入数据
    ui->tableWidget->setItem(0, 0, new QTableWidgetItem("数据1"));
    ui->tableWidget->setItem(0, 1, new QTableWidgetItem("数据2"));
    ui->tableWidget->setItem(0, 2, new QTableWidgetItem("数据3"));

    // 在第2行插入一行数据
    ui->tableWidget->insertRow(1);
    ui->tableWidget->setItem(1, 0, new QTableWidgetItem("数据4"));
    ui->tableWidget->setItem(1, 1, new QTableWidgetItem("数据5"));
    ui->tableWidget->setItem(1, 2, new QTableWidgetItem("数据6"));

    for(int i = 0; i < 4; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            ui->tableWidget->setItem(i+2, j, new QTableWidgetItem(QString("%1_%2").arg(i+2).arg(j)));
        }
    }

    // 遍历表格中的所有单元格,并打印它们的内容
    for (int row = 0; row < ui->tableWidget->rowCount(); ++row)
    {
        for (int column = 0; column < ui->tableWidget->columnCount(); ++column)
        {
            QTableWidgetItem *item = ui->tableWidget->item(row, column);
            //qDebug() << "(" << row << "," << column << "):" << item->text();
        }
    }

    // 隐藏第一列
    // ui->tableWidget->setColumnHidden(0, true);

image.png