QTableWidget使用

QTableWidget使用

1. 设置表头

    QStringList headerList;
    headerList << QString("Control Mode")
               << QString("Technical Status")<< QString("Work Status")
               << QString("Starting Frequency") << QString("Ending Frequency")
               << QString("Starting Azimuth") << QString("Ending Azimuth")
               << QString("Elevation") << QString("Antenna Rotation Speed")
               << QString("Reporting Time");

    m_workStatusTable->setColumnCount(headerList.size());
    m_workStatusTable->setHorizontalHeaderLabels(headerList);

2. 设置列尺寸模式

通过下面的代码设置列宽模式。列尺寸模式在qt中是个枚举类型,如下:

enum ResizeMode
    {
        Interactive,
        Stretch,
        Fixed,
        ResizeToContents,
        Custom = Fixed
    };

下面分别介绍各个值对表头的影响。

  • Interactive ,交互模式,通过鼠标拖拽表格中间的分割线调整表格宽度。
  ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
  • Stretch ,使每一列都相等,并占满表格宽度。
 ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
```

- Fixed 固定模式,这个模式一般与其他属性一起设置,比如手动设置列的宽度,设置最后一列自动拉伸。

~~~cpp
 ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
 ui->tableWidget->setColumnWidth(0, 30);
 ui->tableWidget->horizontalHeader()->setStretchLastSection(true);

在这里插入图片描述

  • ResizeToContents ,列的宽度会根据列标题文字的宽度设置
   ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
   ui->tableWidget->horizontalHeader()->setStretchLastSection(true);

在这里插入图片描述
以上列宽模式也可以混合使用,如已经设置了Stretch模式,但是觉得某一列宽度不合适,可以按照如下方式进行设置。

  ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
  ui->tableWidget->setColumnWidth(0, 30);

如果不设置第0列为QHeaderView::Fixed,则setColumnWidth(0, 30); 将不起作用。

3. 表格数据

3.1 插入数据

假设有一个表示学生成绩信息的数据结构如下:

typedef struct st_Student
{
    QString stuNo;
    QString name;
    double  chinese;
    double  math;
    double  english;

}stStudent;

QList<stStudent> stuInfoList 

stuInfoList 中有5条数据,将数据添加到表格中:

foreach (stStudent studentInfo, stuInfoList)
{
    setRowData(studentInfo);
}
    
void setRowData(const stStudent &stuInfo)
{
    QStringList dataList;
    dataList << stuInfo.stuNo << stuInfo.name << QString::number(stuInfo.chinese, 'f',2)
             << QString::number(stuInfo.math, 'f',2)<< QString::number(stuInfo.english, 'f',2);

	//获取表格中数据的条数,作为新插入的行号
    int row = ui->tableWidget->rowCount();
    //从表格最后新增一行
    ui->tableWidget->insertRow(row);
    for (int col = 0; col < dataList.size(); ++col)
    {
        QTableWidgetItem *pItem = new QTableWidgetItem(dataList[col]);
        ui->tableWidget->setItem(row, col, pItem);
    }
}

在这里插入图片描述

3.2 QTableWidgetItem 详解

QTableWidgetItem 是显示和编辑单元格数据的类。它可以包含文本、图标和数据,并提供了一系列方法来设置和获取这些数据。以下是一些 QTableWidgetItem 的主要特点和用法:

  • 构造函数:
    QTableWidgetItem 提供了多个构造函数,可以根据需要传递不同的参数。最常见的构造函数是接受一个字符串作为参数的构造函数,用于设置单元格的文本值:
  QTableWidgetItem *item = new QTableWidgetItem("Hello");
  • 设置和获取文本值
  item->setText("Hello");
  QString text = item->text();
  • 设置和获取图标
  QIcon icon(":/images/icon.png");
  item->setIcon(icon);
  QIcon itemIcon = item->icon();
  • 设置和获取数据:

    QTableWidgetItem 可以保存自定义的数据:

    stStudent stuInfo;
    QVariant data;
    data.setValue(stuInfo);
    item->setData(Qt::UserRole, data); // 保存自定义类型数据
    QVariant data = item->data(Qt::UserRole);
    stStudent value = data.value<stStudent>();
    
  • 设置文本对齐:

  item->setTextAlignment(Qt::AlignCenter); // 文本居中对齐
  Qt::Alignment alignment = item->textAlignment();
  
  除了AlignCenter外还有 AlignLeft 、AlignRight 、AlignTop、AlignBottom、AlignVCenter等。
  • 设置和获取编辑属性:

    可以使用 setFlags(Qt::ItemFlags) 方法设置 QTableWidgetItem 的编辑属性

  item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable); // 允许选择和编辑
  Qt::ItemFlags itemFlags = item->flags();
  • 其他属性和方法:

    QTableWidgetItem 还提供了许多其他属性和方法,如设置前景色、背景色、字体、工具提示等。你可以根据需要查阅 Qt 的官方文档来了解更多详细信息。

   void setBackground(const QBrush &brush)//设置背景色
   void setCheckState(Qt::CheckState state)//设置CheckBox选中状态
   void setFont(const QFont &font)//设置字体
   void setForeground(const QBrush &brush)//设置前景色
   void setSelected(bool select)//设置是否选中
   void setSizeHint(const QSize &size)//设置尺寸大小
   void setToolTip(const QString &toolTip)//设置提示信息,当鼠标移到表格时自动显示该信息
  • 总之,QTableWidgetItem 是在表格控件中用于显示和编辑单元格数据的重要类。它提供了丰富的功能和方法,可以根据需要设置和获取文本、图标、数据等属性,以满足表格数据的定制化需求。

4. 设置表格样式

本节将结合样式表和表格属性来设置表格的样式,下图是QtDesigner中QTableWidget的属性列表
在这里插入图片描述

4.1 设置表格背景

这里把表格背景设置为浅灰色

tableWidget->setStyleSheet("QTableWidget { background-color: lightgray; }");

在这里插入图片描述

4.2 设置表头样式

使用 QHeaderView 和 ::section 选择器来设置表头的样式,例如设置背景色和字体样式:

tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section { background-color: gray; color: white; font-weight: bold; }");

在这里插入图片描述

4.3 设置单元格样式

使用 QTableWidget::item 选择器来设置单元格的样式,例如设置背景色和字体样式:

tableWidget->setStyleSheet("QTableWidget::item { background-color: lightblue; font-weight: bold; }");

在这里插入图片描述

4.4 设置选中行样式

使用 QTableWidget::item:selected 选择器来设置选中行的样式,例如设置背景色和字体颜色

tableWidget->setStyleSheet("QTableWidget::item:selected { background-color: blue; color: white; }");

在这里插入图片描述

4.5 设置边框样式

tableWidget->setStyleSheet("QTableWidget { border: 1px solid black; }");

在这里插入图片描述

4.6 设置交替背景色

设置交替背景色时有两点需要注意,一是需要设置属性alternatingRowColors为true;二是不要设置单元格的背景色,即样式表中不要在有这样的设置QTableWidget::item { background-color: lightblue; }

tableWidget->setAlternatingRowColors(true);
tableWidget->setStyleSheet("QTableWidget { alternate-background-color: lightblue; }");

在这里插入图片描述

4.7 设置单元格边框颜色

使用 gridline-color 属性来设置表格的边框样式,例如设置边框宽度和颜色:

tableWidget->setStyleSheet("QTableWidget { gridline-color: green; }");

在这里插入图片描述

4.8 设置单元格边框隐藏

tableWidget->setShowGrid(false);

在这里插入图片描述

4.9 合并单元格

假设在学生成绩表中最后一行需要统计各学科的总分数,可以用下面的代码设置合并单元格:

int row = ui->tableWidget->rowCount();
ui->tableWidget->insertRow(row);

QTableWidgetItem *pItem = new QTableWidgetItem("各科总分");
pItem->setTextAlignment(Qt::AlignCenter);

ui->tableWidget->setItem(row, 0, pItem);
ui->tableWidget->setSpan(row, 0, 1, 2);

setSpan函数原型 void setSpan(int row, int column, int rowSpan, int columnSpan); 其中row表示行,column表示列,rowSpan 为行跨度,这里是1,columnSpan 为列跨度,这里是2。
在这里插入图片描述

5. 与表格交互

5.1 选择

表格的选择效果一般需要selectionBehavior 和 selectionMode 这两个属性搭配设置,可以通过函数调用setSelectionBehavior、setSelectionMode 设置,也可以直接在Designer中设置。

SelectionBehavior 是枚举变量其可选值有3个,其含义为:

  • SelectItems 0 按单元格选择,根据SelectionMode的值不同,可以选择一个或多个单元格。

  • SelectRows 1 按一行选择,根据SelectionMode的值不同,可以选择一行或多行。

  • SelectColumns 2 按列选择,根据SelectionMode的值不同,可以选择一列或多列。

SelectionMode 也是枚举变量其可选值有5个,其含义为:

  • NoSelection 0 不能选择任何单元格。
  • SingleSelection 1 只能选择一个单元格或者一行或者一列,选中一个后之前选中的会自动取消。
  • MultiSelection 2 当用户以普通方式选择一个单元格时,该单元格的选择状态将改变,而其他单元格将保持不变。用户可以通过拖动鼠标来选择多个单元格。
  • ExtendedSelection 3 当用户以普通方式选择一个单元格时,选择会被清除并选择新的项目。然而,如果用户在点击一个项目时按下 Ctrl 键,被点击的单元格会切换选择状态,而其他单元格保持不变。如果用户在点击一个单元格时按住 Shift 键,当前单元格和点击的单元格之间的所有单元格(包括当前单元格和点击的单元格)将根据点击的单元格的状态被选择或取消选择。用户可以通过拖动鼠标来选择多个单元格。
  • ContiguousSelection 4 当用户以普通方式选择一个单元格时,选择会被清除并选择新的单元格。然而,如果用户在点击一个单元格时按下 Shift 键,那么当前单元格和点击的单元格之间的所有单元格(包括当前单元格和点击的单元格)将根据点击的单元格的状态被选择或取消选择。

6. 查看QTableWidget某个单元格的数据

ui->jamTableWidget->item(0, 2)->text();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LovG-Sco-Tec

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

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

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

打赏作者

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

抵扣说明:

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

余额充值