由于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);
}
其他按钮、首页、上页、下页、尾页也是类似。 文章来源:https://www.toymoban.com/news/detail-520603.html
设置频率,只需再应用按钮槽函数中,读入doublespinbox中的值,处理并赋给计时器即可。计时器固定该频率刷新数据。文章来源地址https://www.toymoban.com/news/detail-520603.html
到了这里,关于QTableWidget动态储存数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!