Qt表格分页,跳转,首尾页

2023-11-19

简介

1.使用QTableWidget实现了首页,上下页切换,尾页,以及跳转。
在这里插入图片描述

上代码

widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void updataPage();
    void updataPageData();

    void initHeader(const QStringList &headers);

    void addLogData(const QVariantList &data);

    void addLogDatas(const QList<QVariantList> &datas);
private slots:
    void on_pushButton_3_clicked();

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_5_clicked();

private:
    Ui::Widget *ui;

    QList<QVariantList> m_lDatas;
    int currentPageSum;
    int pageSum;
    int currentPage;
};
#endif // WIDGET_H

widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    initHeader(QStringList() << "行号" << "内容");

    currentPageSum = 50;
    currentPage = 1;


    for (int i = 1; i <= 100000; i++) {
        QVariantList varList;
        varList << i << QString("测试");
        m_lDatas.push_back(varList);
    }
    addLogDatas(m_lDatas);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::updataPage()
{
    if (m_lDatas.size() <= 50) {
        pageSum = 1;
    }
    if ((m_lDatas.size() % 50) == 0) {
        pageSum = m_lDatas.size() / 50;

    }
    else {
        pageSum = (m_lDatas.size() / 50) + 1;
    }

    ui->label->setText(QString("%1/%2").arg(currentPage).arg(pageSum));
}

void Widget::updataPageData()
{
    if (currentPage == 0) {
        return;
    }

    //获取具体下标 (当前页号*当前页的总数)-当前页的总数)= 某一页的第一个的具体数据下标
    int index = (currentPage * currentPageSum) - currentPageSum;


    //删除
    for(int row = ui->logTabWidget->rowCount() - 1;row >= 0; row--)
    {
        ui->logTabWidget->removeRow(row);
    }

    int i = 0;
    for (; index < m_lDatas.size(); ++index) {
        if (index >= (currentPage * currentPageSum)) {
            break;
        }

        int rowcount = ui->logTabWidget->rowCount();
        ui->logTabWidget->insertRow(rowcount);

        QVariantList varList = m_lDatas.at(index);

        for (int j = 0; j < varList.size(); ++j) {
            QTableWidgetItem* item = new QTableWidgetItem();
            item->setData(0, varList.at(j));
            item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
            ui->logTabWidget->setItem(i, j, item);
        }
        i++;
    }
}

void Widget::initHeader(const QStringList &headers)
{
    ui->logTabWidget->setColumnCount(headers.size());
    ui->logTabWidget->setHorizontalHeaderLabels(headers);
    ui->logTabWidget->verticalHeader()->setHidden(false);

    ui->logTabWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    ui->logTabWidget->setColumnWidth(0, 20);
    ui->logTabWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);    //x先自适应宽度

    QHeaderView *header = ui->logTabWidget->verticalHeader();
    header->setHidden(true);// 隐藏行号
}

void Widget::addLogData(const QVariantList &data)
{
    m_lDatas.append(data);
    updataPageData();
    updataPage();
}

void Widget::addLogDatas(const QList<QVariantList> &datas)
{
    //m_lDatas = datas;
    currentPage = 1;
    updataPageData();
    updataPage();
}


void Widget::on_pushButton_3_clicked()
{
    //首页
    currentPage = 1;
    updataPageData();
    updataPage();
}

void Widget::on_pushButton_clicked()
{
    //上一页
    if (currentPage == 1) {
        return;
    }

    currentPage--;
    updataPageData();
    updataPage();
}

void Widget::on_pushButton_2_clicked()
{
    //下一页
    if (currentPage >= pageSum) {
        return;
    }
    currentPage++;
    updataPageData();
    updataPage();
}

void Widget::on_pushButton_4_clicked()
{
    //尾页
    currentPage = pageSum;
    updataPageData();
    updataPage();

}

void Widget::on_pushButton_5_clicked()
{
    //跳转
    if (ui->spinBox->value() > pageSum
            || currentPage == ui->spinBox->value()
            || ui->spinBox->value() == 0
            || pageSum == 1) {
        return;
    }
    currentPage = ui->spinBox->value();
    updataPageData();
    updataPage();
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt表格分页,跳转,首尾页 的相关文章

随机推荐

  • 软件项目经理的基本职责

    软件项目经理的基本职责 1 制定项目计划 并根据各种变化修改项目计划2 实施 项目的管理 开发 质量保证过程 确保客户的成本 进度 绩效和质量目标 3 制定有效的项目决策过程4 确保在项目生命周期中遵循是实施公司的管理和质量政策5 选择一个
  • VC++ CComboBox自绘(选择下拉列表框)

    效果图 头文件定义 CSWCheckComboBox h pragma once class CSWCheckComboBox public CComboBox DECLARE DYNAMIC CSWCheckComboBox 成员私有结构
  • gdal解析tif

    bool HandleTif ReadTif tif文件读取 std string name D XX xx tif const char charName name c str 注册 GDALAllRegister 以防中文名不能正常读取
  • Docker本地镜像推送到私有库

    Docker Registry是官方提供的工具 可以用于构建私有镜像仓库 1 下载镜像Docker Registry docker pull registy 2 运行私有库Registry 相当于本地有个私有Docker hub docke
  • 计算机基础——Excel 2010

    天软备考交流群 365218976 1 Excel 2010的基本操作 1 1 Excel的窗口界面 1 2 工作簿与工作表 1 3 单元格区域的管理 1 4 工作表的管理 1 5 输入和编辑数据 1 6 行 列和单元格的管理 1 7 批注
  • java代码引用jar包中文件的方法

    jar是一个单独的文件 里面的文件称之为资源 有两种方法获取 里面的资源文件 一般将资源文件放到resources文件夹中 1 推荐 静态和非静态方法中都能用 ClassName class getClassLoader getResour
  • 刷脸支付服务商抓住机会迎头赶上

    科技改变未来并不是一句口号 就拿买东西来讲 以前人们都是一手交钱一手交货 拿到大额的纸币 还要验真假 而现在移动支付成为主要付款方式 只要一部手机 扫一扫就能付款 一开始也有很多人不习惯手机支付 因为觉得没有现金实在 整天就是一堆数字转来转
  • 前端手写(正则、字符串、函数)

    1 实现千位分隔符 保留三位小数 parseToMoney 1234 56 return 1 234 56 parseToMoney 123456789 return 123 456 789 parseToMoney 1087654 321
  • ajax 传回underfined,$.jquery ajax返回的数据(json)显示为’undefined’

    这里我有一个简单的 PHP脚本 它以json格式显示数据库中的一些值 source GET source query MysqL query SELECT FROM images WHERE big thumb source results
  • Anaconda安装教程及numpy环境配置

    一 下载Anaconda 下载地址 https www anaconda com 二 安装Anaconda 1 进入官网后 看不懂英文可以先将网页翻译成中文 然后点击产品 gt 个人版 如图进入下载页面 2 可以直接点击下载 也可以滚动到页
  • 并发编程----4.java并发包中线程池的原理研究

    并发编程 4 java并发包中线程池的原理研究 java并发包中线程池ThreadPoolExecutor的原理研究 线程池的优点 线程的复用 减少线程创建和销毁带来的消耗 提供了一种资源限制和线程管理的手段 比如限制线程的个数和动态新增线
  • 数据库常用工具

    定期对你的MYSQL数据库进行一个体检 是保证数据库安全运行的重要手段 因为 好的工具是使你的工作效率倍增 常用工具 1 mysql 该mysql不是指mysql服务 而是指mysql的客户端工具 语法 mysql options data
  • 官方系统镜像烧写(windows下使用OTG)

    目录 OTG系统烧写 为什么能通过VBS将系统烧写进去呢 OTG系统烧写 选择对应的烧写工具 USB OTG线连接好 双击即可进行烧写 注意 当然也可以烧写到SD卡里面 前面我们烧写裸机代码都是选择从SD卡启动 Mfgtool这个工具先向板
  • unity官方demo学习之Stealth(二)警报灯设定

    为light alarm directional添加脚本DoneAlarmLight AlarmLight cs using UnityEngine using System Collections public class DoneAla
  • 设计模式-2--工厂模式(Factory Pattern)

    一 什么是工厂模式 工厂模式 Factory Pattern 是一种创建型设计模式 它提供了一种创建对象的接口 但是将对象的实例化过程推迟到子类中 工厂模式允许通过调用一个共同的接口方法来创建不同类型的对象 而无需暴露对象的实例化逻辑 工厂
  • java word转pdf 后通过 PdfReader 和 PdfStamper对pdf添加水印 通过poi等组件实现

    所需jar包地址
  • javah用法

    正确做法 进入到包com所在的目录 是java文件所在的包 不是class javah classpath jni com jnitest MainActivity 如果执行这个 javah jni com example zndktest
  • Git中添加文件.gitignore作用

    添加文件 gitignore作用 作用 我们使用Git时 经常看到 gitignore文件 具体有什么作用呢 作用 该文件用来描述Git仓库中不需要管理的文件和目录 一般可以在初始化时自动生成 gitignore文件 如果初始化是忘记加入此
  • 虚拟化、虚拟机等概念理解

    虚拟化 定义 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 在一台计算机上同时运行多个逻辑计算机 每个逻辑计算机可运行不同的操作系统 并且应用程序都可以在相互独立的空间内运行而不受影响 从而显著提高计算机的工作效率 软件 完全虚拟 V
  • Qt表格分页,跳转,首尾页

    简介 1 使用QTableWidget实现了首页 上下页切换 尾页 以及跳转 上代码 widget h ifndef WIDGET H define WIDGET H include