QtableWidget用法流程

​作者:流火 日期:2020/5/10

QTableWidget的基本构造函数

QTableWidget 是QTableview的子类。主要去呗是QTableView 可以使用自定义的数据

模型来显示内容,也就是先要通过setModel来绑定数据源。而Qtablewidget则只是能通过标准的数据模型,并且单元格数据是QTableWidgetItem的对象来实现的也就是不需要数据源,将逐个单元格内的信息填好即可。

构造函数以及基本设置:

QTableWidget *tablewidget = new QTableWidget(10,5);//创建一个QTableWodget对象,有10行五列
//还可以
QTableWidget *tablewidget = new QTableWidget();
tw->setRowCount(10);//设置行数
tw->setColumnCount(5);//设置列数
tw->setWindowTitle("QTableWidget & item");//设置窗口标题
tw->resize(350,200);//重新设置大小
QStringList header;//QStringList 类似一个QString数组
header<<"month"<<"description";//<< 是一个重载符,作用类似于vector中的push_back,往数组最后添加QString元素
tw->setHorizontalHeaderLabels(header);//设置水平的头标签
//seiItem 是用来设置QtableWidget 各个单元格。单元格从(0,0)开始。
//参数共有三个,前面是两个分别是坐标x,y后面是单元格对象
//QTableWidgetItem是QTableWidget单元格对象。
tw->setItem(0,0,new QTableWidgetItem("jan"));
tw->setItem(0,1,new QTableWidgetItem("janmonth"));

最后效果:

QtableWidget用法流程-LMLPHP

对QTableWidget本身的实现

  1. 将表格变为禁止编辑
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
QAbstractItemView::NoEditTriggers  0  不能对表格内容进行修改
QAbstractItemView::CurrentChanged 1 任何时候都能对单元格修改
QAbstractItemView::DoubleClicked 2 双击单元格
QAbstractItemView::SelectedClicked 4 单击已选中的内容
QAbstractItemView::EditKeyPressed 8 Editing starts when the platform edit key has been pressed over an item.
QAbstractItemView::AnyKeyPressed 16 按下任意键就能修改
QAbstractItemView::AllEditTriggers 31 以上条件全包括
  1. 设置表格为整行选择

    tw->setSelectionBehavior(QAbstractITemView::ExtendedSelection);
    //设置为可以选择多个目标
    Constant  Value  Description
    QAbstractItemView::SelectItems 0 Selecting single items.选中单个单元格
    QAbstractItemView::SelectRows 1 Selecting only rows.选中一行
    QAbstractItemView::SelectColumns 2 Selecting only columns.选中一列
  2. 单个选中和多个选中

tw->setSelectionMode(QAbstracItemView::ExtendedSelecttion);//设置为多个选中

参数还有:

QAbstractItemView::NoSelection 不能选择

QAbstractItemView::SingleSelection 选中单个目标

QAbstractItemView::MultiSelection 选中多个目标

QAbstractItemView::ExtendedSelection QAbstractItemView::ContiguousSelection 的区别不明显,主要功能是正常情况下是单选,但按下Ctrl或Shift键后,可以多选
  1. 表格表头的显示与隐藏

​ 对于水平胡垂直方法的表头,可以用以下方式进行 隐藏/显示 的设置。注意:必须包含#include

tableWidget->verticalHeader()->setVisible(false); //隐藏列表头
tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头
  1. 对表头文字的字体,颜色进行设置 注意:需要#include
//获得水平方向表头的Item对象
QTableWidgetItem *item1 = tableWidget->horizontalHeaderItem(0);
item1->setFont(QFont(字体名称));//设置字体样式
item->setBackgroundColor(QColor(0,60,10));//设置单元格背景颜色 注意会显示过期在qt5
item->setTextColor(QColor(QColor::Red));//设置字体颜色会显示过期
  1. 单元格里添加控件

QTableWidget允许把控件也放到单元格中。比如下拉框

QComboBox *comBox = new QComboBox();
comBox->addItem("Y");
comBox->addItem("N");
tableWidget->setCellWidget(0,2,comBox);

单元格的设置

  1. 单元格设置字体颜色和背景颜色;
QTableWidgetItem *item = new QTableWidgetItem("Apple");
item->setBackgroundColor(QColor(0,60,10)); //蛇者背景颜色
item->setTextColor(QColor(200,111,100)); //设置颜色字体
item->setFont(QFont("Helvetica")); //设置文字字体
tableWidget->setItem(0,3,item); //让某个单元格应用
  1. 设置单元格内文字的对齐方式
//先定义个QtablewidgetItem对象
QTablewidgetItem 8item = new QTableWidgetItem();
ite.setTextAlignment(Qt.AlignLeft);//设置左对齐
//水平对齐方式
Constant Value Description
Qt.AlignLeft 0x0001 Aligns with the left edge.
Qt.AlignRight 0x0002 Aligns with the right edge.
Qt.AlignHCenter 0x0004 Centers horizontally in the available space.
Qt.AlignJustify 0x0008 Justifies the text in the available space.
//垂直对齐方式
Constant Value Description
Qt.AlignTop 0x0020 Aligns with the top.
Qt.AlignBottom 0x0040 Aligns with the bottom.
Qt.AlignVCenter 0x0080 Centers vertically in the available space.

如果两种都要设置,只需要将一个符号‘|’。只能是一个垂直一个水平,不能是相同的方向

  1. 合并单元格
tableWidget->setSpan(0, 0, 3, 1);
//参数的意思是从0行到3行(不包括三行)0列到1列(不包括一列)合并成一个单元格
  1. 设置单元格的大小

    首先,可以指定某个行或者列的大小

    tableWidget->setColumnWidth(3,200);
    tableWidget->setRowHeight(3,60);

    还可以将行和列的大小设为与内容相匹配

tableWidget->resizeColumnsToContents();
tableWidget->resizeRowsToContents();
  1. 获得单元格内容

通过实现 itemClicked(QTableWidgetItem *)信号的槽函数获取鼠标单击到的单元格的指针进而获得其中的文字信息

connect(tableWidget,SIGNAL(itemClicked(QTreeWidgetItem*)),this, SLOT( getItem(QTreeWidgetItem*)) );
05-11 22:50