QTableWidget动态储存数据

这篇具有很好参考价值的文章主要介绍了QTableWidget动态储存数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

        为什么不用view/model?

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

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

qt里面通过tablewidget添加数据,QT,qt,c++,ui

         首先将数据保存并且显示。这里我每页显示行数为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中的值,处理并赋给计时器即可。计时器固定该频率刷新数据。文章来源地址https://www.toymoban.com/news/detail-520603.html

到了这里,关于QTableWidget动态储存数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT-TableWidget多个行或者列合并效果

    使用代理,重新组合了行和列的合并,符合更多的实际应用场景,通过参数的方式,可以自定义设置想要的效果。 https://download.csdn.net/download/u013083044/86784759

    2024年02月15日
    浏览(36)
  • qt设置tablewidget颜色、添加选择框、添加按钮和进度条

    添加选择框 在代码中设置tablewidget的样式表 设置表格,添加选择框 cellClicked事件响应,当点击表格项,对复选框进行选中和取消选择 添加进度条和按钮 设置表格 建立按钮和处理函数的信号槽连接,让按钮点击,进度条移动 槽函数和进度条控件 项目下载 https://download.csdn.n

    2024年02月11日
    浏览(57)
  • QTableWidget通过QSS美化

    外观 详见Github

    2024年02月13日
    浏览(40)
  • QT 实现tablewidget整行的上下移动和双击编辑

    一、效果展示 二、实现方法 1、先对tablewidget设置 2、实现行的上下移动 主要实现方式是通过交换两行的数据来实现的 下面这两句主要实现选择行跟随移动的行

    2024年02月11日
    浏览(52)
  • 【PyQt5】Qt Designer系列-----tableWidget部件设置使用教程

    注意不要选错部件tableView了!!! (1)选中tableWidget部件右键“编辑项目”打开 (2)设置行、列的间隔 (3)去掉行或列索引 (4)设置列左对齐或居中(默认居中) (5)设置标题之间的间隔 选中tableWidget部件右键“改变样式表” (1)设置选中显示背景颜色 (2)设置拉条

    2024年02月16日
    浏览(57)
  • Qt::实现qtablewidget分页功能

    头文件: .cpp文件 实现效果:      大佬写得很棒,很简单就实现了qtablewidget的分页功能,但是不知道会不会有什么问题,现在看起来是没问题的,加了个跳转功能,写得比较潦草

    2024年02月15日
    浏览(41)
  • 关于在Qt中tableWidget表格中有按钮或者chebox选择点击事件

    这里以checkbox为例: 基本思路:使用槽函数监听checkBox的改变,获取点击checkBox所在的行数和列数 槽函数

    2024年02月05日
    浏览(46)
  • Qt QTableWidget 表格自适应 高度和宽度

    1. 在MainWindow中设置 1.1. 对被嵌入的子窗口进行设置,去除子窗口的一些影响到嵌入的部件。 pTable:指向子窗口堆内存的指针 1.2. 设置子窗口可以跟随主窗口自适应变化宽度。 水平方向:子窗口的自适应缩放。也可以直接在设计师中完成。 2. 在QTableWidget ui表格的 cpp文件中设

    2023年04月21日
    浏览(81)
  • QT-QTablewidget 设置选中某一行

    要在 QTableWidget 中设置选中的行,可以使用 setCurrentItem() 函数来设置当前的 QTableWidgetItem。你可以通过调用 QTableWidget 的 item() 函数获得指定行和列的 QTableWidgetItem,然后通过将其传递给 setCurrentItem() 函数来设置选中的行。 下面是一个示例代码,演示了如何设置 QTableWidget 中的选

    2024年02月09日
    浏览(44)
  • Qt QTableWidget表格控件的用法(非常详细)

    QTableWidget 是 Qt 提供的一种表格控件(如图 1 所示),类似于我们经常使用的 Excel 表格,可以将数据以表格的方式展示给用户。 整个 QTableWidget 表格可以分为 3 个区域: 区域 ① 和 ② 都是表头,区域 ① 设置每一行的表头,区域 ② 设置每一列的表头。我们可以自定义两个区

    2024年01月20日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包