QTableWidget的使用方法

首先我在ui界面加入了一个Table Widget,这个Table Widget我设置了6列
在这里插入图片描述
首先在.H文件中加入头文件:#include <QTableWidgetItem>

一、在初始化时加入下面代码

ui->tableWidget->viewport()->installEventFilter(this);   //注册事件过滤器
ui->tableWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);//设置滚动条平滑一点
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);//设置充满表宽度
/* 设置各列的宽度 */
ui->tableWidget->setColumnWidth(0, 45);
ui->tableWidget->setColumnWidth(1, 45);
ui->tableWidget->setColumnWidth(2,150);
ui->tableWidget->setColumnWidth(3,150);
ui->tableWidget->setColumnWidth(4,150);
ui->tableWidget->setColumnWidth(5,180);

ui->tableWidget->verticalHeader()->hide();  //设置垂直头不可见
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选择行为时每次选择一行
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);   //设置不可编辑
ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
//table_widget->setSelectionMode(QAbstractItemView::ExtendedSelection); //可多选(Ctrl、Shift、  Ctrl+A都可以)

table_widget->horizontalHeader()->resizeSection(0,150);//设置表头第一列的宽度为150
table_widget->horizontalHeader()->setFixedHeight(25);//设置表头的高度
table_widget->setStyleSheet("selection-background-color:lightblue;");//设置选中背景色
table_widget->horizontalHeader()->setStyleSheet("QHeaderView::section{background:skyblue;}");//设置表头背景色


//设置水平、垂直滚动条样式
table_widget->horizontalScrollBar()->setStyleSheet("QScrollBar{background:transparent;height:10px;}"
"QScrollBar::handle{background:lightgray;border:2px solid transparent; border-radius:5px;}"
"QScrollBar::handle:hover{background:gray;}"
"QScrollBar::sub-line{background:transparent;}"
"QScrollBar::add-line{background:transparent;}");

table_widget->verticalScrollBar()->setStyleSheet("QScrollBar{background:transparent;width: 10px;}"
"QScrollBar::handle{background:lightgray;border:2px solid transparent; border-radius:5px;}"
"QScrollBar::handle:hover{background:gray;}"
"QScrollBar::sub-line{background:transparent;}"
"QScrollBar::add-line{background:transparent;}");


ui->tableWidget->show();

二、多选并获取所选行

this->setSelectionMode(QAbstractItemView::ExtendedSelection); //设置多选(可以Ctral+A全选Ctral+Shift多选)获取所选行号:

bool TableWidget::getSelectedRow(QSet&set_row)
{
    QList items =this->selectedItems();
    int item_count =items.count();
    if(item_count <= 0)
    {
       return false;
    }
    for(int i=0; i<item_count ;i++)
    {
       //获取选中的行
       int item_row = this->row(items.at(i));
       set_row.insert(item_row);
    }
    return true;
}

三、操作表单(添加、删除行等)

(1)更新整个表格,插入行

    ui->tableWidget->clearContents();//清除表格,在析构中也要调用
    ui->tableWidget->setRowCount(SearchList.size());//设置行数,每次更新tablewidget都要调用这两行
    for(int i=0;i<SearchList.size();i++)
    {
		//这一行中的每一列都加入各自的数据
        ui->tableWidget->setItem(i,0,new QTableWidgetItem(tr("%1").arg(i+1)));
        ui->tableWidget->setItem(i,1,new QTableWidgetItem(tr("%1").arg(" ")));
        ui->tableWidget->setItem(i,2,new QTableWidgetItem(tr("%1").arg(SearchList.at(i).name)));
        ui->tableWidget->setItem(i,3,new QTableWidgetItem(SearchList.at(i).startTime.toString("yyyy-MM-dd hh:mm:ss")));
        ui->tableWidget->setItem(i,4,new QTableWidgetItem(SearchList.at(i).endTime.toString("yyyy-MM-dd hh:mm:ss")));
        ui->tableWidget->setItem(i,5,new QTableWidgetItem(tr("%1").arg(q_time)));
		//设置文本为中间对齐
        ui->tableWidget->item(i,0)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
        ui->tableWidget->item(i,1)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
        ui->tableWidget->item(i,2)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
        ui->tableWidget->item(i,3)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
        ui->tableWidget->item(i,4)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
        ui->tableWidget->item(i,5)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
		//设置行高
        ui->tableWidget->setRowHeight(i,60);
    }

(2)设置指定行,这里将这一行最前面的设置一个*号,然后设置整行为灰色

  for(int i=0;i<this->SearchList.size();i++)
    {
         tabrow_nuamber.append(i);
         for(int j =0;j<6;j++)
         {
             if(j == 1)//设置该行第一列
             {
                 ui->tableWidget->setItem(i,j,new QTableWidgetItem(tr("%1").arg("*")));
				 ui->tableWidget->item(i,j)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
             }
             ui->tableWidget->item(i,j)->setBackgroundColor(QColor(100,100,100));//设置整行的颜色为灰色
         }
     }

(3)双击某一行
在这里插入图片描述

void record::on_tableWidget_cellDoubleClicked(int row, int column)
{
    QList<QTableWidgetItem*> items = ui->tableWidget->selectedItems();
    if(!items.isEmpty())
    {
        int count = items.count();//获取该行的成员数,列数
        int row = ui->tableWidget->row(items.at(0));// 获取该行的行号
		for(int i = 0; i < count; i++) //获取该行所有成员的数据,
		{
			int row = ui->tableWidget->row(items.at(i));
			QTableWidgetItem *item = items.at(i);
			QString text = item->text(); //获取内容
		}
       	/*获取选中行第二列的数据*/
       	QTableWidgetItem* item = ui->tableWidget_right->item(row,2);
		qDebug() << item->Text();

    }
}

单击和上面的双击差不多
在这里插入图片描述
同样也可以获取选中的行和列

ui->tableWidget->clearContents();

清除tableWidget,防止内存泄漏

record::~record()
{
    ui->tableWidget->clearContents();
    delete ui;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QTableWidget类是Qt中用于显示表格数据的类之一,使用QTableWidget *table指针可以创建、显示和操作QTableWidget实例。 以下是QTableWidget *table的常用方法: 1. 创建QTableWidget实例: ``` QTableWidget *table = new QTableWidget(parent); //创建QTableWidget实例 ``` 其中parent是父QWidget指针,可以为nullptr。 2. 设置表格行列数: ``` table->setRowCount(rowCount); //设置表格行数 table->setColumnCount(columnCount); //设置表格列数 ``` 其中rowCount为行数,columnCount为列数。 3. 添加表格数据: ``` table->setItem(row, column, item); //设置指定单元格的内容 ``` 其中row和column是指定单元格的行列索引,item是QTableWidgetItem实例,可以设置单元格的文本、图标等属性。 4. 设置表头: ``` table->setHorizontalHeaderLabels(horizontalHeaderLabels); //设置水平表头标签 table->setVerticalHeaderLabels(verticalHeaderLabels); //设置垂直表头标签 ``` 其中horizontalHeaderLabels和verticalHeaderLabels分别为QStringList类型的表头标签列表,可以设置表格的水平和垂直表头。 5. 设置单元格属性: ``` table->item(row, column)->setBackgroundColor(color); //设置单元格背景色 table->item(row, column)->setForeground(font); //设置单元格前景色 ``` 其中color为QColor类型的背景色,font为QFont类型的前景色,可以设置单元格的颜色和字体等属性。 6. 其他常用方法: ``` table->resizeRowsToContents(); //自适应调整行高 table->resizeColumnsToContents(); //自适应调整列宽 table->setSelectionMode(QAbstractItemView::SelectionMode); //设置选择模式 table->setEditTriggers(QAbstractItemView::EditTriggers); //设置编辑触发器 ``` 以上是QTableWidget *table的常用方法,可以根据实际需求灵活使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值