Qt 学习笔记 10.QTableWidget

Posted zll_@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt 学习笔记 10.QTableWidget相关的知识,希望对你有一定的参考价值。

1.如何彻底删除 QTableWidget 中的表项

Qt 中,可以使用 QTableWidget::removeRow() 函数彻底删除在 QTableWidget 中的行,从而删除该行中的所有表项。

QTableWidget::removeRow() 函数接受一个整数类型的行号作为参数,表示需要删除的行号。该函数将从 QTableWidget 中删除相应的行,并释放其占用的资源,同时把后面的行全部往上移动以填补被删除的行的位置。

以下是使用 QTableWidget::removeRow() 函数彻底删除 QTableWidget 中的行的示例代码:

// 删除表格第2行
QTableWidget* tableWidget = new QTableWidget();
tableWidget->removeRow(1);

需要注意的是,QTableWidget::removeRow() 函数只能用于彻底删除 QTableWidget 中的 行项,而不能删除单元格中的 数据。如果只需要清空某个单元格的数据,则可以通过单元格的坐标进行访问并清除其内容,如下所示:

// 清空第2行第3列单元格的数据
tableWidget->setItem(1, 2, new QTableWidgetItem(""));

如果需要删除 QTableWidget 中所有的行,可以使用以下代码:

// 删除所有行
while (tableWidget->rowCount() > 0) 
    tableWidget->removeRow(0);

以上代码可以循环调用 QTableWidget::removeRow() 函数删除所有行,直到 QTableWidget 中没有剩余的行。

2.如何彻底删除 QTableWidget 中的所有数据

Qt 中,可以通过 QTableWidget::clearContents() 函数和 QTableWidget::setRowCount() 函数来彻底删除 QTableWidget 中的所有数据。

具体实现如下:

  1. 调用 QTableWidget::clearContents() 函数删除所有单元格的数据。该函数可以清空 QTableWidget 中的所有单元格中的内容,但不会删除行或列。示例代码如下:
QTableWidget* tableWidget = new QTableWidget();
tableWidget->clearContents();
  1. 调用 QTableWidget::setRowCount() 函数重置行数。该函数用于设置 QTableWidget 中的行数,可以使用 setRowCount(0) 删除所有行。示例代码如下:
QTableWidget* tableWidget = new QTableWidget();
tableWidget->setRowCount(0);

需要注意的是,调用 QTableWidget::clearContents() 函数只会清空单元格中的 内容,而不会删除 行或列,因此需要使用 QTableWidget::setRowCount()函数删除 所有行

如果需要清空所有表格并重置行数及列数,可以使用以下代码:

// 清空表格并重新设置行列数
tableWidget->clearContents();
tableWidget->setRowCount(0);
tableWidget->setColumnCount(0);

以上代码使用 QTableWidget::clearContents() 函数清空表格中所有的内容,然后使用 QTableWidget::setRowCount(0)QTableWidget::setColumnCount(0) 函数来清除所有行和列。

3.如何设置 QTableWidget 中的所有数据不可编辑

Qt 中,可以通过 QTableWidgetItem::setFlags() 函数设置单个表格项是否可编辑,但是对于一个 QTableWidget 中的所有表格项,我们可以使用 QTableWidgetItem 类的静态函数 QTableWidget::setEditTriggers() 实现一次性设置所有表格项不可编辑。

具体实现如下:

QTableWidget* tableWidget = new QTableWidget();

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

// 设置所有表格项不可编辑
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

在上述代码中,我们通过 setRowCount()setColumnCount() 函数设置了表格的行数和列数为 103。然后,我们使用 setEditTriggers() 函数将所有表格项的可编辑属性设置为 QAbstractItemView::NoEditTriggers,使得所有表格项不可编辑。

需要注意的是,如果需要让某些特定单元格可以编辑,可以在该单元格中手动设置可编辑属性,如下所示:

QTableWidgetItem* item = new QTableWidgetItem("text");
item->setFlags(item->flags() | Qt::ItemIsEditable);
tableWidget->setItem(0, 0, item);

在上述示例中,我们首先创建了一个 QTableWidgetItem 对象,并将其文本内容设置为 “text”。然后,我们使用 setFlags() 函数将该单元格的编辑属性设置为 Qt::ItemIsEditable,从而使它可编辑。

综上所述,我们可以使用 setEditTriggers() 函数设置 QTableWidget 中所有表格项的编辑属性为不可编辑,或在需要编辑的单元格中手动设置其编辑属性。

4.在使用 QTableWidgetItem 类的静态函数 QTableWidget::setEditTriggers() 实现一次性设置所有表格项不可编辑后,如何让所有表格线项再次可编辑

在使用 QTableWidgetItem 类的静态函数 QTableWidget::setEditTriggers() 函数设置所有表格项不可编辑之后,需要重新设置表格项的可编辑属性,使其可以再次编辑。此时可以再次调用 QTableWidget::setEditTriggers() 函数,并将其参数设置为 QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked | QAbstractItemView::EditKeyPressed 或其他需要的编辑触发条件,从而使得表格项处于可编辑状态。如下所示:

QTableWidget* tableWidget = new QTableWidget();

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

// 设置所有表格项不可编辑
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

// 使得所有表格项重新可以编辑
tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked | QAbstractItemView::EditKeyPressed);

在上述代码中,我们首先调用 setEditTriggers() 函数,将所有表格项的可编辑属性设置为 QAbstractItemView::NoEditTriggers,使得所有表格项不可编辑。然后,在需要重新编辑表格项时,我们再次调用 setEditTriggers() 函数,并将其参数设置为需要的编辑触发条件,使得表格项处于可编辑状态。

需要注意的是,如果只需要让某些特定单元格可以编辑,而不是所有单元格,可以在其上调用 setFlags() 函数并将其属性设置为 Qt::ItemIsEditable,如下所示:

QTableWidgetItem* item = new QTableWidgetItem("text");
item->setFlags(item->flags() | Qt::ItemIsEditable);
tableWidget->setItem(0, 0, item);

在上述示例中,我们首先创建了一个 QTableWidgetItem 对象,并将其文本内容设置为 “text”。然后,我们使用 setFlags() 函数将该单元格的编辑属性设置为 Qt::ItemIsEditable,从而使其可编辑。

QTableWidget控件学习

内容是从网上找的,放到这备查。

【1】QTableWidget简介

QTableWidget是QT对话框设计中常用的显示数据表格的控件。

学习QTableWidget就要首先看看QTableView控件(控件也是有”家世“的!就像研究人一样一样的),因为QTableWidget继承于类QTableView。

两者主要区别是QTableView可以使用自定义的数据模型来显示内容(也就意味着使用时先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型。

QTableWidget单元格数据是QTableWidgetItem对象来实现的(即就是不需要数据源,单元格内的信息需要逐个填充即可)。

这主要由于QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。

使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的其中一个单元格,整个表格都需要用逐个单元格对象QTableWidgetItem构建起来。

【2】QTableWidget控件属性

(1)禁止编辑表格

在默认情况下,表格里的字符是可以更改的。

比如双击一个单元格,就可以修改原来的内容,如果想禁止用户的这种操作,让这个表格对用户只读,可以这样:

1 ui.qtablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

(2)设置表格为选择整行

1 /*设置表格为整行选中*/
2 ui.qtablewidget->setSelectionBehavior(QAbstractItemView::SelectRows); 

(3)设置单个选中和多个选中

单个选中意味着每次只可以选中一个单元格,多个就是相当于可以选择”一片“那种模式。

1 /*设置允许多个选中*/ 
2     ui.qtablewidget->setSelectionMode(QAbstractItemView::ExtendedSelection);  

(4)表格表头的显示与隐藏

对于水平或垂直方向的表头,如果不想显示可以用以下方式进行(隐藏/显示)设置:

1 ui.qtablewidget->verticalHeader()->setVisible(true);  
2 ui.qtablewidget->horizontalHeader()->setVisible(false);

(5)设置具体单元格中字体的对齐方式

1 ui.qtablewidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter);

(6)设置具体单元格中字体格式

1 ui.qtablewidget->item(1, 0)->setBackgroundColor(QColor(0,60,10));   
2 ui.qtablewidget->item(1, 0)->setTextColor(QColor(200,111,100)); 
3 ui.qtablewidget->item(1, 0)->setFont(QFont("Helvetica")); 

(7)设置具体单元格的值

1 ui.qtablewidget->setItem(1, 0, new QTableWidgetItem(str));

(8)把QTableWidgetItem对象内容转换为QString

1 QString str =ui.qtablewidget->item(0, 0)->data(Qt::DisplayRole).toString();

(9)具体单元格中添加控件

1 QComboBox *comBox = new QComboBox(); 
2 comBox->addItem("F"); 
3 comBox->addItem("M"); 
4 ui.qtablewidget->setCellWidget(0,3,comBox);

(11)合并单元格

1 //合并单元格的效果
2 ui.qtablewidget->setSpan(2, 2, 3, 2);
3 //第一个参数:要改变的单元格行数
4 //第二个参数:要改变的单元格列数
5 //第三个参数:需要合并的行数
6 //第四个参数:需要合并的列数

(12)具体单元格中插入图片

ui.qtablewidget->setItem(3, 2, new QTableWidgetItem(QIcon("images/music.png"), "Music"));

(13)设置显示网格

ui.qtablewidget->setShowGrid(true);//显示表格线

(14)设置滚动条

ui.qtablewidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条

(15)设置列标签

技术分享图片
 1     //初始化界面
 2     QStringList  HStrList;
 3     HStrList.push_back(QString("name"));
 4     HStrList.push_back(QString("id"));
 5     HStrList.push_back(QString("age"));
 6     HStrList.push_back(QString("sex"));
 7     HStrList.push_back(QString("department"));
 8     
 9 
10     //设置行列数(只有列存在的前提下,才可以设置列标签)
11     int HlableCnt = HStrList.count();
12     ui.qtablewidget->setRowCount(10);
13     ui.qtablewidget->setColumnCount(HlableCnt);
14 
15     //设置列标签
16     ui.qtablewidget->setHorizontalHeaderLabels(HStrList);
技术分享图片

(16)设置行和列的大小设为与内容相匹配

1 ui.qtablewidget->resizeColumnsToContents();  
2 ui.qtablewidget->resizeRowsToContents();  

(17)设置字体

ui.qtablewidget->setFont(font);   //设置字体

(18)获取某一单元格的内容

1 QString strText = ui.qtablewidget->item(0, 0)->text();

 (19)个性化设置

    学习  qt assistant  "qt style sheets"

  例如:setStyleSheet("QTableWidget{ gridline-color : rgb(255, 0, 0)}");设置表格线的颜色为红色

 

以上是关于Qt 学习笔记 10.QTableWidget的主要内容,如果未能解决你的问题,请参考以下文章

Qt学习笔记

QT学习笔记3

学习笔记QT下载地址

Qt学习笔记1.初步接触

QT学习笔记——ui的认识

00——QT学习笔记以及项目实战目录