效果图:
![](https://i-blog.csdnimg.cn/blog_migrate/6725976a14fad0d5177695ba8e59413a.png)
代码:
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
![](https://i-blog.csdnimg.cn/blog_migrate/0ec8cbedf9f49398ae383098375b1c66.png)