Qt之QTableWidget详细使用

一、QTableWidget简介

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

QTableWidget继承于类QTableView,所以在学习QTableWidget之前可以先看一下QTableWidget,他们两者的区别是:QTableView可以使用自定义的数据模型来显示内容(也就意味着使用时先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型。
QTableWidget单元格数据是QTableWidgetItem对象来实现的(即就是不需要数据源,单元格内的信息需要逐个填充即可)。 这主要由于QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。

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

二、QTableWidget控件属性

(1)禁止编辑表格

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

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

[cpp] view plain copy
  1. ui.qtablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);  

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

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


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

单个选中意味着每次只可以选中一个单元格,多个就是相当于可以选择”一片“那种模式。
[cpp] view plain copy
  1. /*设置允许多个选中*/   
  2. ui.qtablewidget->setSelectionMode(QAbstractItemView::ExtendedSelection);   

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

对于水平或垂直方向的表头,如果不想显示可以用以下方式进行(隐藏/显示)设置:
[cpp] view plain copy
  1. ui.qtablewidget->verticalHeader()->setVisible(true);   
  2. ui.qtablewidget->horizontalHeader()->setVisible(false);  

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

[cpp] view plain copy
  1. ui.qtablewidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter);  

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

[cpp] view plain copy
  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)设置具体单元格的值

[cpp] view plain copy
  1. ui.qtablewidget->setItem(1, 0, new QTableWidgetItem(str));  

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

[cpp] view plain copy
  1. QString str =ui.qtablewidget->item(0, 0)->data(Qt::DisplayRole).toString();  

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

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

(10)合并单元格

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

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

[cpp] view plain copy
  1. ui.qtablewidget->setItem(3, 2, new QTableWidgetItem(QIcon("images/music.png"), "Music"));  

(12)设置显示网格

[cpp] view plain copy
  1. ui.qtablewidget->setShowGrid(true);//显示表格线  

(13)设置滚动条

[cpp] view plain copy
  1. ui.qtablewidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条  

(14)设置列标签

 //初始化界面

[cpp] view plain copy
  1. QStringList HStrList;  
  2. HStrList.push_back(QString("name"));  
  3. HStrList.push_back(QString("id"));  
  4. HStrList.push_back(QString("age"));  
  5. HStrList.push_back(QString("sex"));  
  6. HStrList.push_back(QString("department"));  
  7. //设置行列数(只有列存在的前提下,才可以设置列标签)  
  8.  int HlableCnt = HStrList.count();  
  9. ui.qtablewidget->setRowCount(10);  
  10. ui.qtablewidget->setColumnCount(HlableCnt);  
  11.   
  12. //设置列标签  
  13. ui.qtablewidget->setHorizontalHeaderLabels(HStrList);  

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

[cpp] view plain copy
  1. ui.qtablewidget->resizeColumnsToContents();   
  2. ui.qtablewidget->resizeRowsToContents();   

(17)设置字体

[cpp] view plain copy
  1. ui.qtablewidget->setFont(font); //设置字体  

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

[cpp] view plain copy
  1. QString strText = ui.qtablewidget->item(0, 0)->text();  

(19)清空表格的内容

[cpp] view plain copy
  1. void QTableWidget::clear () [slot]//清空掉表格内所有内容,包括标题头  
  2.   
  3. void QTableWidget::clearContents () [slot]//这个清空所有内容不包括标题头  
[cpp] view plain copy
  1. void QTableWidget::removeColumn ( int column ) [slot]//这个是删除一列,而不是清空表格  
  2.   
  3. void QTableWidget::removeRow ( int row ) [slot]//这个是删除一行,不是清空一行  

三、实例展示
[cpp] view plain copy
  1. #include "widget.h"  
  2. #include "ui_widget.h"  
  3.   
  4. Widget::Widget(QWidget *parent) :  
  5.     QWidget(parent),  
  6.     ui(new Ui::Widget)  
  7. {  
  8.     ui->setupUi(this);  
  9.   
  10.     ui->tableWidget->setRowCount(10);  
  11.     ui->tableWidget->setColumnCount(5);  
  12.     ui->tableWidget->setWindowTitle("QTableWidget & Item");  
  13.     ui->tableWidget->resize(400, 300);  //设置表格  
  14.     QStringList header;  
  15.     header<<"Name"<<"Age";   //表头  
  16.     ui->tableWidget->setHorizontalHeaderLabels(header);  
  17.     ui->tableWidget->setItem(0,0,new QTableWidgetItem("张飞"));  
  18.     ui->tableWidget->setItem(1,0,new QTableWidgetItem("关羽"));  
  19.     ui->tableWidget->setItem(2,0,new QTableWidgetItem("吕布"));  
  20.   
  21.     ui->tableWidget->setItem(0,1,new QTableWidgetItem("35"));  
  22.     ui->tableWidget->setItem(1,1,new QTableWidgetItem("36"));  
  23.     ui->tableWidget->setItem(2,1,new QTableWidgetItem("32"));  
  24.     ui->tableWidget->show();  
  25. }  
  26.   
  27. Widget::~Widget()  
  28. {  
  29.     delete ui;  
  30. }  
在ui文件中拉了一个Tablewidget控件。效果:
Qt之QTableWidget详细使用



版权声明:转载请标明博客地址http://blog.****.net/u010780613。 https://blog.****.net/u010780613/article/details/50442639

一、QTableWidget简介

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

QTableWidget继承于类QTableView,所以在学习QTableWidget之前可以先看一下QTableWidget,他们两者的区别是:QTableView可以使用自定义的数据模型来显示内容(也就意味着使用时先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型。
QTableWidget单元格数据是QTableWidgetItem对象来实现的(即就是不需要数据源,单元格内的信息需要逐个填充即可)。 这主要由于QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。

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

二、QTableWidget控件属性

(1)禁止编辑表格

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

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

[cpp] view plain copy
  1. ui.qtablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);  

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

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


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

单个选中意味着每次只可以选中一个单元格,多个就是相当于可以选择”一片“那种模式。
[cpp] view plain copy
  1. /*设置允许多个选中*/   
  2. ui.qtablewidget->setSelectionMode(QAbstractItemView::ExtendedSelection);   

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

对于水平或垂直方向的表头,如果不想显示可以用以下方式进行(隐藏/显示)设置:
[cpp] view plain copy
  1. ui.qtablewidget->verticalHeader()->setVisible(true);   
  2. ui.qtablewidget->horizontalHeader()->setVisible(false);  

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

[cpp] view plain copy
  1. ui.qtablewidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter);  

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

[cpp] view plain copy
  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)设置具体单元格的值

[cpp] view plain copy
  1. ui.qtablewidget->setItem(1, 0, new QTableWidgetItem(str));  

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

[cpp] view plain copy
  1. QString str =ui.qtablewidget->item(0, 0)->data(Qt::DisplayRole).toString();  

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

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

(10)合并单元格

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

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

[cpp] view plain copy
  1. ui.qtablewidget->setItem(3, 2, new QTableWidgetItem(QIcon("images/music.png"), "Music"));  

(12)设置显示网格

[cpp] view plain copy
  1. ui.qtablewidget->setShowGrid(true);//显示表格线  

(13)设置滚动条

[cpp] view plain copy
  1. ui.qtablewidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条  

(14)设置列标签

 //初始化界面

[cpp] view plain copy
  1. QStringList HStrList;  
  2. HStrList.push_back(QString("name"));  
  3. HStrList.push_back(QString("id"));  
  4. HStrList.push_back(QString("age"));  
  5. HStrList.push_back(QString("sex"));  
  6. HStrList.push_back(QString("department"));  
  7. //设置行列数(只有列存在的前提下,才可以设置列标签)  
  8.  int HlableCnt = HStrList.count();  
  9. ui.qtablewidget->setRowCount(10);  
  10. ui.qtablewidget->setColumnCount(HlableCnt);  
  11.   
  12. //设置列标签  
  13. ui.qtablewidget->setHorizontalHeaderLabels(HStrList);  

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

[cpp] view plain copy
  1. ui.qtablewidget->resizeColumnsToContents();   
  2. ui.qtablewidget->resizeRowsToContents();   

(17)设置字体

[cpp] view plain copy
  1. ui.qtablewidget->setFont(font); //设置字体  

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

[cpp] view plain copy
  1. QString strText = ui.qtablewidget->item(0, 0)->text();  

(19)清空表格的内容

[cpp] view plain copy
  1. void QTableWidget::clear () [slot]//清空掉表格内所有内容,包括标题头  
  2.   
  3. void QTableWidget::clearContents () [slot]//这个清空所有内容不包括标题头  
[cpp] view plain copy
  1. void QTableWidget::removeColumn ( int column ) [slot]//这个是删除一列,而不是清空表格  
  2.   
  3. void QTableWidget::removeRow ( int row ) [slot]//这个是删除一行,不是清空一行  

三、实例展示
[cpp] view plain copy
  1. #include "widget.h"  
  2. #include "ui_widget.h"  
  3.   
  4. Widget::Widget(QWidget *parent) :  
  5.     QWidget(parent),  
  6.     ui(new Ui::Widget)  
  7. {  
  8.     ui->setupUi(this);  
  9.   
  10.     ui->tableWidget->setRowCount(10);  
  11.     ui->tableWidget->setColumnCount(5);  
  12.     ui->tableWidget->setWindowTitle("QTableWidget & Item");  
  13.     ui->tableWidget->resize(400, 300);  //设置表格  
  14.     QStringList header;  
  15.     header<<"Name"<<"Age";   //表头  
  16.     ui->tableWidget->setHorizontalHeaderLabels(header);  
  17.     ui->tableWidget->setItem(0,0,new QTableWidgetItem("张飞"));  
  18.     ui->tableWidget->setItem(1,0,new QTableWidgetItem("关羽"));  
  19.     ui->tableWidget->setItem(2,0,new QTableWidgetItem("吕布"));  
  20.   
  21.     ui->tableWidget->setItem(0,1,new QTableWidgetItem("35"));  
  22.     ui->tableWidget->setItem(1,1,new QTableWidgetItem("36"));  
  23.     ui->tableWidget->setItem(2,1,new QTableWidgetItem("32"));  
  24.     ui->tableWidget->show();  
  25. }  
  26.   
  27. Widget::~Widget()  
  28. {  
  29.     delete ui;  
  30. }  
在ui文件中拉了一个Tablewidget控件。效果:
Qt之QTableWidget详细使用