ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt:tableWidget分页功能,并且插入控件

2021-11-03 15:01:02  阅读:481  来源: 互联网

标签:控件 Qt int rowCount tableWidget ui new hLayout


在tableWidget加入控件主要用

void QTableWidget::setCellWidget(int row, int column, QWidget *widget)

int rowCount = ui->tableWidget->rowCount();
QWidget *myWidget = new QWidget;
QVBoxLayout *hLayout = new QVBoxLayout();
QCheckBox *ckb = new QCheckBox();
//借助Layout来实现
hLayout->addWidget(ckb);
hLayout->setMargin(0);
//按钮居中
hLayout->setAlignment(ckb, Qt::AlignCenter);
myWidget->setLayout(hLayout);
//在rowCount行的第一列添加QCheckBox按钮
ui->tableWidget->setCellWidget(rowCount, 1, myWidget); 

分页的功能,主要的操作有首页,尾页,上一页,下一页,增加,删除等操作,

直接上代码:

#include "widget.h"
#include "ui_widget.h"
#include <QCheckBox>
#include <QVBoxLayout>
#include <QWidget>
#include <QPushButton>
#include <QTableWidgetItem>
#include <QDebug>

#define PAGE_VALUE 10  //一页显示10条数据

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

void Widget::init_tableWidget()
{
    pageSize = PAGE_VALUE;
    curPage = 0;
    ui->tableWidget->setColumnCount(2);
    QStringList list;
    list << "name" << "statu";
    ui->tableWidget->setHorizontalHeaderLabels(list);
    //插入数据
    for(int i = 0; i < 50; i++)
    {
        int row_count = ui->tableWidget->rowCount();
        ui->tableWidget->insertRow(row_count);
        ui->tableWidget->setItem(i, 0, new QTableWidgetItem("cjs"));
        QWidget *myWidget = new QWidget;
        QVBoxLayout *hLayout = new QVBoxLayout();
        QCheckBox *ckb = new QCheckBox();
        hLayout->addWidget(ckb);
        hLayout->setMargin(0);
        hLayout->setAlignment(ckb, Qt::AlignCenter);
        myWidget->setLayout(hLayout);
        ui->tableWidget->setCellWidget(i, 1, myWidget);
    }
    showPageDate();
}

void Widget::run_tableWidget()
{
    connect(ui->upButton, &QPushButton::clicked, [=]()
    {
        curPage--;
        showPageDate();
    });
    connect(ui->nextButton, &QPushButton::clicked, [=]()
    {
        curPage++;
        showPageDate();
    });
    connect(ui->fristButton, &QPushButton::clicked, [=]()
    {
        curPage = 0;
        showPageDate();
    });
    connect(ui->finalButton, &QPushButton::clicked, [=]()
    {
        curPage = getPageCount(ui->tableWidget->rowCount()) - 1;
        showPageDate();
    });
    connect(ui->addButton, SIGNAL(clicked()), this, SLOT(addButton_click()));
    connect(ui->delButton, SIGNAL(clicked()), this, SLOT(delButton_click()));
}

//点击添加按钮
void Widget::addButton_click()
{
    int rowCount = ui->tableWidget->rowCount();
    ui->tableWidget->insertRow(rowCount);
    ui->tableWidget->setItem(rowCount, 0, new QTableWidgetItem("xxx"));
    QWidget *myWidget = new QWidget;
    QVBoxLayout *hLayout = new QVBoxLayout();
    QCheckBox *ckb = new QCheckBox();
    hLayout->addWidget(ckb);
    hLayout->setMargin(0);
    hLayout->setAlignment(ckb, Qt::AlignCenter);
    myWidget->setLayout(hLayout);
    ui->tableWidget->setCellWidget(rowCount, 1, myWidget);
    showPageDate();
    if(ui->tableWidget->rowCount() > 0)
        ui->delButton->setDisabled(false);
}
//点击删除,删除当前行
void Widget::delButton_click()
{
    if(ui->tableWidget->rowCount() == 0)
    {
        ui->delButton->setDisabled(true);
        return;
    }
    int curRow = ui->tableWidget->currentIndex().row();
    if(curRow >= 0 && curRow <= ui->tableWidget->rowCount())
        ui->tableWidget->removeRow(curRow);
    if(curPage * PAGE_VALUE >= ui->tableWidget->rowCount() - 1)
        curPage--;
    showPageDate();
}

//获取总的page页数
int Widget::getPageCount(int row_count)
{

    int pageCount = 0;
    if(row_count == 0)
        return pageCount = 0;
    if(row_count % pageSize == 0)
         pageCount = row_count / pageSize;
    else
        pageCount = row_count / pageSize + 1;
    return pageCount;
}

//显示当前页的数据
void Widget::showPageDate()
{
    int rowCount = ui->tableWidget->rowCount();
    if(curPage == 0)
    {
        ui->upButton->setDisabled(true);
        ui->fristButton->setDisabled(true);
    }
    else
    {
        ui->upButton->setDisabled(false);
        ui->fristButton->setDisabled(false);
    }

    if(curPage == getPageCount(rowCount) - 1)
    {
        ui->nextButton->setDisabled(true);
        ui->finalButton->setDisabled(true);
    }
    else
    {
        ui->nextButton->setDisabled(false);
        ui->finalButton->setDisabled(false);
    }

    int iStart = pageSize * curPage;
    int iEnd = 0;
    if(iStart + pageSize < rowCount)
        iEnd = iStart + pageSize;
    else
        iEnd = rowCount;
    for(int i = 0; i < rowCount; i++)
    {
        if(i >= iStart && i < iEnd)
            ui->tableWidget->setRowHidden(i, false);
        else
            ui->tableWidget->setRowHidden(i, true);
    }
}

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

运行效果:

标签:控件,Qt,int,rowCount,tableWidget,ui,new,hLayout
来源: https://blog.csdn.net/chen_jin_sheng/article/details/121120858

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有