QTableWidget实现表格数据显示以及翻页效果_qtablewidget 翻页_shuifei2020的博客-程序员秘密

技术标签: qt  

效果图:

实现效果

 

代码:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

struct Param{
    Param(int tIndex, int tX, int tY,int tAngle, int tMatch,int tScale)
        : index(tIndex), x(tX),y(tY),angle(tAngle),match(tMatch),scale(tScale)
        {}
    int index = 10 ;
    int x = 10;
    int y =10;
    int angle = 10;
    int match =10;
    int scale = 15;

};

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

    void InitData();
    void InitTableWidget();

private slots:

    void on_pushButton_nextPage_clicked();

    void on_pushButton_prePage_clicked();

private:
    QVector<Param> m_vector;
    int m_label = 0 ;

    int main_pages = 1; //主页页数
    int rows_per_page = 8; //每页显示的行数
    int column_counts = 5; //每页显示的列数
    int total_pages = 1; //表格总页数
    int cur_pages_index = 1 ; //当前所在页

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

 

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QScrollBar>
#include <QDebug>
#include <QLabel>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowFlag(Qt::FramelessWindowHint);
    InitData();
    InitTableWidget();
}

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

void MainWindow::InitData()
{
    for(int i = 0 ; i < 35 ; i++)
    {
        Param single_item{i,i,i,i,i,i} ;
        m_vector.append(single_item);
     }
}

void MainWindow::InitTableWidget()
{
    if(m_vector.isEmpty())
        return;

   int vector_size = m_vector.size();
   int label_pages_count = 0 ; //标签页页数

   if(m_vector.size()%3 == 0) //设置表格显示的标签数据总共有多少页
   label_pages_count =  m_vector.size()/3 ;
   else
   label_pages_count =  m_vector.size()/3 + 1;

   total_pages = main_pages + label_pages_count;


   ui->tableWidget->horizontalHeader()->setVisible(false);
   ui->tableWidget->verticalHeader()->setVisible(false);
   ui->tableWidget->setRowCount(rows_per_page* total_pages); //设置显示的行数
   ui->tableWidget->setColumnCount(column_counts); //设置每页的列数
   ui->tableWidget->setShowGrid(false);
   ui->tableWidget->setAlternatingRowColors(true); //设置间隔行颜色交替
   ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
   ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);


   //显示主页数据  begin ==================================================
   ui->tableWidget->setItem(0,2, new QTableWidgetItem("值"));
   ui->tableWidget->setItem(0,3, new QTableWidgetItem("最大值"));
   ui->tableWidget->setItem(0,4, new QTableWidgetItem("最小值"));

   ui->tableWidget->setItem(2,0, new QTableWidgetItem("个数"));
   ui->tableWidget->setItem(3,0, new QTableWidgetItem("X"));
   ui->tableWidget->setItem(4,0, new QTableWidgetItem("Y"));
   ui->tableWidget->setItem(5,0, new QTableWidgetItem("相似度"));
   ui->tableWidget->setItem(6,0, new QTableWidgetItem("比率"));
   ui->tableWidget->setItem(7,0, new QTableWidgetItem("角度"));

   for(int i = 2; i < 5 ;i++)
   {
       ui->tableWidget->setItem(2,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).index)));
       ui->tableWidget->setItem(3,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).x)));
       ui->tableWidget->setItem(4,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).y)));
       ui->tableWidget->setItem(5,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).match)));
       ui->tableWidget->setItem(6,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).scale)));
       ui->tableWidget->setItem(7,i, new QTableWidgetItem(QString::number(m_vector.at(m_label).angle)));
   }

   //显示标签页数据 begin=========================================================
   int index_row_begin_label_pages = main_pages*rows_per_page; //开始显示标签页时的row index;
   for(int i = 0 ; i< m_vector.size() ;i++)
   {
       //每页标签页子页内容
       int j = i%3; //i = 0,3,6,9,12,15... // j =0,1,2,3,...
       int row_index = index_row_begin_label_pages + i/3*rows_per_page ;
       if(j == 0) //新的一页标签页
       {
           ui->tableWidget->setItem(row_index+1,0, new QTableWidgetItem("个数"));
           ui->tableWidget->setItem(row_index+2,0, new QTableWidgetItem("X"));
           ui->tableWidget->setItem(row_index+3,0, new QTableWidgetItem("Y"));
           ui->tableWidget->setItem(row_index+4,0, new QTableWidgetItem("相似度"));
           ui->tableWidget->setItem(row_index+5,0, new QTableWidgetItem("比率"));
           ui->tableWidget->setItem(row_index+6,0, new QTableWidgetItem("角度"));

       }
       //第j+1页标签页,即第main_pages + j+1页
       ui->tableWidget->setItem(row_index+0,j+2, new QTableWidgetItem(QString::asprintf("标签%d",i)));
       ui->tableWidget->setItem(row_index+1,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).index)));
       ui->tableWidget->setItem(row_index+2,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).x)));
       ui->tableWidget->setItem(row_index+3,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).y)));
       ui->tableWidget->setItem(row_index+4,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).match)));
       ui->tableWidget->setItem(row_index+5,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).scale)));
       ui->tableWidget->setItem(row_index+6,j+2, new QTableWidgetItem(QString::number(m_vector.at(i).angle)));

   }
   ui->tableWidget->scrollToTop();
   ui->label_index_pages->setText(QString("%1/%2").arg(cur_pages_index).arg(total_pages));
   qDebug()<<__FUNCTION__<<"ui->tableWidget->rowCount(): "<<ui->tableWidget->rowCount() << "ui->tableWidget total pages" << total_pages
          << "cur_pages_index: " << cur_pages_index;

}


void MainWindow::on_pushButton_nextPage_clicked()
{
    //   QTableView::verticalScrollBar()->setSliderPosition();  //设置当前滑动条的位置
    //   QTableView::verticalScrollBar()->maximum();             //滑动条能移动的最大位置
    //   QTableView::verticalScrollBar()->value();                   //获得当前滑动条的位置

    cur_pages_index++;
    if(cur_pages_index > total_pages)
    {
        cur_pages_index = 1;
    }

    ui->tableWidget->verticalScrollBar()->setSliderPosition(cur_pages_index*rows_per_page -rows_per_page);
    ui->label_index_pages->setText(QString("%1/%2").arg(cur_pages_index).arg(total_pages));


}

void MainWindow::on_pushButton_prePage_clicked()
{
    //   QTableView::verticalScrollBar()->setSliderPosition();  //设置当前滑动条的位置
    //   QTableView::verticalScrollBar()->maximum();             //滑动条能移动的最大位置
    //   QTableView::verticalScrollBar()->value();                   //获得当前滑动条的位置

     cur_pages_index--;
     if(cur_pages_index <= 0)
     {
         cur_pages_index = total_pages;
     }

     ui->tableWidget->verticalScrollBar()->setSliderPosition(cur_pages_index*rows_per_page -rows_per_page);
     ui->label_index_pages->setText(QString("%1/%2").arg(cur_pages_index).arg(total_pages));


}

mainwinodw.ui

mainwindow.ui文件效果

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Believeshuifei/article/details/105133150

智能推荐

UI素材模板|app ui界面的导航设计都有哪些?_awayaya1的博客-程序员秘密

导航的使命就在于自身的“名称”上面,它叫什么名字就是在告诉用户“沿着这条路能通往哪里”,所以导航的展示形式虽然多种多样,却大多逃不出文字的辅佐,这是因为它的本质就是产品对用户传达的一种指向性信息。因为所有用户都是从产品的首页开始进入产品的,所以任务路径全部都是从产品的首页开始延伸的,产品的首页就是全部导航的聚合处,也是产品内所有任务路径的开启之地。根据导航的特征不同,我们可以将导航分成三类——主导航、页面导航、特殊导航。app ui界面的导航设计免费模板到,专注UI素材的搜UI sooui据关.

青龙面板 Bot配置教程_青龙bot_大熊猫i的博客-程序员秘密

青龙面板Bot注意本文适用于青龙所有版本。搭建青龙面板时,完全按照本博客的其他文章一步步搭建,是不会出现错误的。所以出现错误的话一定是没有完全按照本博客教程进行的搭建,请自己找出错误原因!欢迎入群交流:106511927作者公众号bot 介绍可以通俗理解为Bot是一个可以远程给面板发送命令,并收到反馈的机器人。开始首先还是老样子,SSH上服务器,输入命令docker exec -it QL ql bot 然后修改配置文件,如图配置参数配置bot.json 参数{

mianshi总结_hello_world!的博客-程序员秘密

前隆金融jdk7jdk8线程池fixed1.2.....10blockqueue控制器单例多线程同步怎么复用常用linux命令Listset查多写少,查少写多hashset与hashtable数据结构设计模式spring设计模式工厂模式种类亚联业务交行信用卡数据库处理分区,分表设计模式http请求流程...

10 A_咸鸭蛋黄月饼的博客-程序员秘密

题目描述问题描述:任意给定两个字符串str1与str2, str1与str2中可以包含任意字符。你的任务是统计字符串str2在str1中出现的次数。如字符串str1为“asasasbbbasbas”,str2为“as”,则统计结果为5。注意如果字符串str1为“aaaaa”,字符串str2为“aaa”,则统计结果为3。输入与输出要求:输入两个长度不超过100的字符串,以换行符结束。输出统...

二叉查找树(BST) | 平衡二叉查找树(AVL) | 红黑树(RBT)_时间慢慢的博客-程序员秘密

二叉查找树(BST) 特点:对任意节点而言,左子树(若存在)的值总是小于本身,而右子(若存在)的值总是大于本身。 查找:从根开始,小的往左找,大的往右找,不大不小的就是这个节点了; 插入:从根开始,小的往左,大的往右,直到叶子,就插入, 时间复杂度期望为Ο(logn); 删除:如果是叶子节点,直接删除;如果不是,则去找这个节点左子树的最大值,与之交换;如果交换后还不是叶子节点就继续找做字数

Node-Red 实践:企业微信消息推送_nodered微信推送_3dudu的博客-程序员秘密

一个偶然的机会,认识了node-red。这种拖拽控件编写代码的方式给了我很深刻的印象。能够通过简单的拖拽实现mqtt,http,websocket,tcp的服务,作为基于网络的业务流程demon非常方便。最近用它实践了一把,给自己做了一个企业微信消息推送的流程,还是很方便的。Node-RED背景介绍• Node-Red是IBM公司开发的一个可视化的编程工具。它允许程序员通过组合各部件来编写应用程序。这些部件可以是硬件设备(如:Arduino板子)、Web API(如:WebSocket in和WebSo

随便推点

与Ajax邂逅._ShellEx的博客-程序员秘密

                        与Ajax邂逅.                                作者:ShellEx(全金属外壳)    上下文(此部分加密):       ^*&$*UE*W&E*@()$*()@[email protected])($DWDWW.    环境:       Windows 2k3 sp1           *FireFox 2.0           

sqlserver with 递归用法_weixin_30617797的博客-程序员秘密

DECLARE @companyid TABLE ( [Id] [int] ); with cte as( select Id from [base].[Company] where Id=123 union all select a.Id from [base].[Company] a,cte b where a.ParentId=b.Id...

Android| failed to connect to /10.0.2.2 (port 80) after 10000ms_H_JJia的博客-程序员秘密

关于使用android模拟器访问本地服务器失败第一种:使用Googl自带的模拟器 用http://127.0.1.1访问失败描述:明明在浏览器中使用http://127.0.1.1可以访问Apache本地服务器,但是将http://127.0.1.1放在url中,编译构建就显示连接访问失败。原因:Googl自带的Android模拟器在本地开辟了内存,所以使用http://127.0.1.1是默认访问

Android Lint 检查规则的定制(基本篇)_android lint检查定制_古月书斋的博客-程序员秘密

本人博客原文英文原文: http://tools.android.com/tips/lint/suppressing-lint-warnings http://tools.android.com/recent/ignoringlintwarnings一、前言you can also ignore warnings using annotations (in Java f

(转)C语言程序编写规范_Mayouhpevrday的博客-程序员秘密

在还没有编写过十分多代码的时候就应该注意代码编写的规范,以方便以后写大项目时的维护工作。本文来自 码农-嵌入式Linux 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/weiqifa0/article/details/51274935?utm_source=copy前言一个好的程序编写规范是编写高质量程序的保证。清晰、规范的源程序不仅仅是方便阅读,更重要的是...

推荐文章

热门文章

相关标签