QTableWidget动态储存数据

        由于QTable性能低,显示超过一定的数据量会造成卡顿,所以采用动态显示的方法将存储数据与显示数据分开。

        为什么不用view/model?

        因为我已经在项目里写好了tablewidget,而且没用过view/model,老懒了,后面在学怎么使用。现在只需要储存和显示QString数据类型,所以也没必要用。

        总体就是,将实时数据储存在一个QVector里,QTableWidget拿出其中指定数据并显示,配合各类按钮查看所有储存的信息。

         首先将数据保存并且显示。这里我每页显示行数为10行即跳转下一页

QVector<QVector<QString>> data::load_data;//所有数据,该向量大小就是数据的行数
QVector<QString> record::datalist(26);//每行的数据,将该向量存到load_data中
int record::pageQuantity=1;//总页数
int record::pageNumberNow=1;//现在页数位置
int record::dataSize=1;//数据行数

void record::tablewidget_update()//表格数据更新
{
    //动态添加行数
    if(temp!=data::current_date)
    {
        dataSize=data::load_data.size();
        qDebug()<<dataSize<<"shul"<<pageNumberNow<<pageQuantity;
        if(dataSize!=0&&dataSize%10==0)//如果总数据行数超过10行,增大总页数
        {
            pageQuantity++;
            ui->label_page->setText("共"+QString::number(pageQuantity)+"页");
        }
        if(pageNumberNow==pageQuantity)//如果当前页码就是总页数,即最后一页,那么储存数据的同时更新widget表中的显示信息。
        {
        int table_len=ui->tableWidget_data->rowCount();
        ui->tableWidget_data->insertRow(table_len);

        ui->tableWidget_data->setItem(table_len,0,new QTableWidgetItem(data::current_date.mid(0,10)));
        ui->tableWidget_data->setItem(table_len,1,new QTableWidgetItem(data::current_date.mid(11,17)));

        if(data::Input_register[0]!=""&&data::Input_register[1]!="")
        ui->tableWidget_data->setItem(table_len,2,new QTableWidgetItem(QString::number((data::Input_register[0].toInt())*0.01)+"*10^-"+data::Input_register[1]));
        ui->tableWidget_data->setItem(table_len,3,new QTableWidgetItem(data::leakage_unit));
        if(data::Input_register[2]!=""&&data::Input_register[3]!="")
        ui->tableWidget_data->setItem(table_len,4,new QTableWidgetItem(QString::number((data::Input_register[2].toInt())*0.1)+"*10^"+data::Input_register[3]));
        if(data::Input_register[4]!=""&&data::Input_register[5]!="")
        ui->tableWidget_data->setItem(table_len,5,new QTableWidgetItem(QString::number((data::Input_register[4].toInt())*0.1)+"*10^"+data::Input_register[5]));
        ui->tableWidget_data->setItem(table_len,6,new QTableWidgetItem(data::vacuum_unit));


        datalist[0]=data::current_date.mid(0,10);
        datalist[1]=data::current_date.mid(11,17);
        datalist[2]=QString::number((data::Input_register[0].toInt())*0.01)+"*10^-"+data::Input_register[1];
        datalist[3]=data::leakage_unit;
        datalist[4]=QString::number((data::Input_register[2].toInt())*0.1)+"*10^"+data::Input_register[3];
        datalist[5]=QString::number((data::Input_register[4].toInt())*0.1)+"*10^"+data::Input_register[5];
        datalist[6]=data::vacuum_unit;

        for(int i=7;i<25;i++)
        {
            ui->tableWidget_data->setItem(table_len,i,new QTableWidgetItem(data::Input_register[i-1]));
           datalist[i]=data::Input_register[i-1];

        }
        data::load_data.append(datalist);
        qDebug()<<data::load_data[dataSize][1]<<"shijian"<<data::load_data[0][1];
        }
        else//如果不是最后一页,那么只需要存储数据到向量表即可
        {
            datalist[0]=data::current_date.mid(0,10);
            datalist[1]=data::current_date.mid(11,17);
            datalist[2]=QString::number((data::Input_register[0].toInt())*0.01)+"*10^-"+data::Input_register[1];
            datalist[3]=data::leakage_unit;
            datalist[4]=QString::number((data::Input_register[2].toInt())*0.1)+"*10^"+data::Input_register[3];
            datalist[5]=QString::number((data::Input_register[4].toInt())*0.1)+"*10^"+data::Input_register[5];
            datalist[6]=data::vacuum_unit;
            for(int i=7;i<25;i++)
            {
               datalist[i]=data::Input_register[i-1];
            }
            data::load_data.append(datalist);
        }

    }

    temp=data::current_date;
}

         通过按钮显示某页数tablewidget中相应向量表中存储的数据。

        这里用利用spinbox转换到确定数据为例,按钮按下,清空table中的所有显示数据。当要跳转的页数是尾页时,需要获取总数据行数再对每页能显示的最大行数取余,取出对应向量位置中的数据并显示即可。当跳转页数不是尾页时,直接取出对应向量数据位的最大行数个数显示。

        

void record::on_pushButton_confirm_clicked()//确认
{
    if(ui->spinBox_page->value()<=pageQuantity)
    {
    pageNumberNow=ui->spinBox_page->value();

    on_pushButton_data_clear_clicked();//清空table中的显示数据

    int showlen,maxline;
    if(pageNumberNow==pageQuantity) showlen = data::load_data.size()%10;//尾页
    else showlen = 10;//不是尾页
    maxline= showlen;
    while(showlen)
    {
        ui->tableWidget_data->insertRow(maxline-showlen);
    for(int i=0;i<25;i++)
    {
        ui->tableWidget_data->setItem(maxline-showlen,i,new QTableWidgetItem(data::load_data[(pageNumberNow-1)*10+maxline-showlen][i]));
    }
    showlen--;
    }
    }
    else ui->spinBox_page->setValue(pageNumberNow);
}

        其他按钮、首页、上页、下页、尾页也是类似。       

        设置频率,只需再应用按钮槽函数中,读入doublespinbox中的值,处理并赋给计时器即可。计时器固定该频率刷新数据。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值