QT QTablewidget实现翻页功能

效果

QT QTablewidget实现翻页功能_第1张图片

代码

初始化

void MainWindow::initTableWidget()
{
    ui->tableWidget->setShowGrid(false);
    ui->tableWidget->verticalHeader()->setVisible(false);   //隐藏列表头
    ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
    ui->tableWidget->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
    ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
    ui->tableWidget->horizontalHeader()->setMinimumHeight(50);//表头高度
    ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{font: max_datapt}");//表头字体
    ui->tableWidget->setColumnCount(1); //设置列数
    ui->tableWidget->setWindowTitle("QTableWidget & Item");
    //tableWidget->resize(350, 200); //设置表格
    QStringList header;
    header<<tr("Data");

    ui->tableWidget->setHorizontalHeaderLabels(header);


    for(int n = 0;n < max_data;n++)
    {
        m_data.append(n);
    }

    if(max_data <= page_data )       //最大数据小于每页数据数处理
    {
        ui->tableWidget->setRowCount(max_data);

        for(int i = 0; i < max_data ; i++)
        {
           ui->tableWidget->setItem(i,0,new QTableWidgetItem(QString::number(m_data.at(i))));
        }
        ui->tableWidget->show();

        return;
    }

    ui->tableWidget->setRowCount(page_data); //设置行数
    QVector<int> tmp_data;

    if(max_data%page_data==0)
    {
        ui->label->setText(QString("%1/%2").arg(n_page).arg(max_data / page_data));
    }
    else
    {
        ui->label->setText(QString("%1/%2").arg(n_page).arg(max_data / page_data + 1));
    }
    for (int i =(n_page - 1) *page_data; i < n_page * page_data; i++)
    {
        tmp_data.append(m_data.at(i));
    }
    for(int i = 0; i < page_data ; i++)
    {
        ui->tableWidget->setItem(i,0,new QTableWidgetItem(QString::number(tmp_data.at(i))));
    }
    ui->tableWidget->show();
    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//表格不能被编辑
}

下一页

void MainWindow::on_pushButton_2_clicked()
{
    if(max_data <= page_data)
    {
        return;
    }
    qDebug()<<"next"<<n_page;
    ui->tableWidget->setRowCount(page_data); //设置行数
    QVector<int> tmp_data;
    tmp_data.clear();

    n_page++;

    if(n_page >= max_data / page_data + 1 )         //最后一页处理
    {
        if(max_data%page_data==0)
        {
            n_page = max_data / page_data;
        }
        else
        {
            n_page = max_data / page_data + 1 ;
        }
    }

    if(max_data%page_data==0)               //整除页处理
    {
        ui->label->setText(QString("%1/%2").arg(n_page).arg(max_data / page_data));
    }
    else
    {
        ui->label->setText(QString("%1/%2").arg(n_page).arg(max_data / page_data + 1));
    }

    if(n_page >= max_data / page_data + 1 )             //最后一页处理
    {
        ui->tableWidget->setRowCount(max_data - (max_data / page_data) * page_data); //设置行数

        for (int i = (max_data / page_data) * page_data; i < max_data ; i++)
        {
            tmp_data.append(m_data.at(i));
        }
        for(int i = 0; i < max_data - (max_data / page_data) * page_data ; i++)
        {
            ui->tableWidget->setItem(i,0,new QTableWidgetItem(QString::number(tmp_data.at(i))));
        }
        return;
    }

    for (int i = (n_page - 1) *page_data; i < n_page * page_data; i++)
    {
        tmp_data.append(m_data.at(i));
    }
    for(int i = 0; i < page_data ; i++)
    {
        ui->tableWidget->setItem(i,0,new QTableWidgetItem(QString::number(tmp_data.at(i))));
    }
    ui->tableWidget->show();
}

上一页

void MainWindow::on_pushButton_3_clicked()
{
    if(max_data <= page_data)
    {
        return;
    }
    qDebug()<<"last"<<n_page;

    ui->tableWidget->setRowCount(page_data); //设置行数
    QVector<int> tmp_data;
    n_page--;
    if(n_page < 1 )
    {
        n_page = 1;
    }
    if(max_data%page_data==0)
    {
        ui->label->setText(QString("%1/%2").arg(n_page).arg(max_data / page_data));
    }
    else
    {
        ui->label->setText(QString("%1/%2").arg(n_page).arg(max_data / page_data + 1));
    }

    tmp_data.clear();

    if(n_page < 1)
    {
        return;
    }

    for (int i = (n_page - 1) *page_data; i < n_page * page_data +1 ; i++)
    {
        tmp_data.append(m_data.at(i));
    }
    for(int i = 0; i < page_data ; i++)
    {
        ui->tableWidget->setItem(i,0,new QTableWidgetItem(QString::number(tmp_data.at(i))));
    }
    ui->tableWidget->show();
}

翻页

void MainWindow::on_pushButton_4_clicked()
{
    if(max_data <= page_data)
    {
        return;
    }
    if(ui->lineEdit->text() == NULL)
    {
        return;
    }
    QVector<int> tmp_data;
    tmp_data.clear();
    ui->tableWidget->setRowCount(page_data); //设置行数

    n_page = ui->lineEdit->text().toInt();
    if(max_data%page_data==0)
    {
        ui->label->setText(QString("%1/%2").arg(n_page).arg(max_data / page_data));
    }
    else
    {
        ui->label->setText(QString("%1/%2").arg(n_page).arg(max_data / page_data + 1));
    }
    if(n_page >= max_data / page_data + 1 )
    {
        if(max_data%page_data==0)
        {
            n_page = max_data / page_data;
        }
        else
        {
            n_page = max_data / page_data + 1 ;
        }
    }

    if(n_page >= max_data / page_data + 1 )
    {
        ui->tableWidget->setRowCount(max_data - (max_data / page_data) * page_data ); //设置行数

        for (int i = (max_data / page_data) * page_data; i < max_data ; i++)
        {
            tmp_data.append(m_data.at(i));
        }
        for(int i = 0; i < max_data - (max_data / page_data) * page_data ; i++)
        {
            ui->tableWidget->setItem(i,0,new QTableWidgetItem(QString::number(tmp_data.at(i))));
        }
        return;
    }

    for (int i = (n_page - 1) *page_data; i < n_page * page_data; i++)
    {
        tmp_data.append(m_data.at(i));
    }
    for(int i = 0; i < page_data ; i++)
    {
        ui->tableWidget->setItem(i,0,new QTableWidgetItem(QString::number(tmp_data.at(i))));
    }
    ui->tableWidget->show();
}

结语

写的比较随意,应该不是最好的写法,权当写着玩了,有些限定没加,还有首位页功能没有写,比较简单,有兴趣的可以自己实现。如有不足之处还请大家指正。

源码链接

链接: Qt QTablewidget分页、翻页.zip.

你可能感兴趣的:(Qt,qt,ui)