Bootstrap

QtableWidget数据插入以及自动轮询

在Qt下经常需要插入数据,点击某一行的数据,还有想让它滚动显示,本篇内容就是介绍如何实现此功能。

一、表头的创建
首先要先规定列数,将要显示的内容赋值于表头,用setColumnCount(num),其中num就是列数,然后给每一列设置宽度 ui->tableWidget->horizontalHeader()->resizeSection(index, size), index为第几列,size为大小,代码如下


    //创建表以及表头
    ui->tableWidget->setColumnCount(6);
    QStringList headers;
    headers <<QStringLiteral("日期") << QStringLiteral("位置") << QStringLiteral("方向")
            <<QStringLiteral("大小") << QStringLiteral("种类") << QStringLiteral("路径");
    ui->tableWidget->setHorizontalHeaderLabels(headers);
    ui->tableWidget->horizontalHeader()->resizeSection(0,190); //设置表头第一列的宽度为190
    ui->tableWidget->horizontalHeader()->resizeSection(1,100);
    ui->tableWidget->horizontalHeader()->resizeSection(2,100);
    ui->tableWidget->horizontalHeader()->resizeSection(3,100);
    ui->tableWidget->horizontalHeader()->resizeSection(4,100);
    ui->tableWidget->horizontalHeader()->resizeSection(5,0);
   
    //设置表头字体加粗
    QFont font;
    font.setBold(true);
    ui->tableWidget->horizontalHeader()->setFont(font);
    ui->tableWidget->verticalHeader()->setFont(font);

    ui->tableWidget->setStyleSheet("selection-background-color:green");  //设置选中背景色
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//设置整行选中

二、数据插入
表头创建好就可以往里面插入数据了,因为我建立了6列,所以每行要新建6个单元格,首先要定位当前的行的位置,用 int column = ui->tableWidget->rowCount() 获取当前行位置,然后插入一行,ui->tableWidget->insertRow(column),新建一行中每个单元格,QTableWidgetItem *item0 = new QTableWidgetItem() ,给每个单元格写入内容item0->setText(),最后将单元格加入到控件之中ui->tableWidget->setItem(column,0,item0),再居中对齐ui->tableWidget->item(column,0)->setTextAlignment(Qt::AlignCenter); 这样数据就写入到表格之中了在这里插入图片描述
三、数据轮询
主要是用到scrollToItem()这个函数,首先是要查找数据,找到那个数据所在的那一行

QList<QTableWidgetItem *>items;
QTableWidgetItem *item;
items = ui->tableWidget->findItems(ScrollPath.at(scrollNum),Qt::MatchExactly);  //在表格中查找数据项

if(items.length() > 0)
{
     item = items.at(0);
     ui->tableWidget->scrollToItem(item, QAbstractItemView::PositionAtCenter);
     ui->tableWidget->setCurrentItem(item);
     ui->tableWidget->setStyleSheet("selection-background-color:green");  //设置选中背景色
 }

ScrollPath.at(scrollNum)就是要查找的内容,然后滑动到那一行即可
ui->tableWidget->scrollToItem(item, QAbstractItemView::PositionAtCenter);
QAbstractItemView::PositionAtCenter是居中显示,也可以在头部显示,或者底部显示,根据个人需要,自己选择。

这样就完成了自动轮询,不过这里会出现一种情况,就是按照顺序轮询,如果跳着点击后,它还会回到上一次轮询的位置,然后接着轮询,想要解决也很简单,改变要查找的内容顺序就行,这里就不细说了。
取之于互联网,还之于互联网, 瑞思拜~

;