C++ 数组分页,经常有用到分页,索性做一个简单封装 已解决

在项目设计中, 有鼠标滑动需求,但是只能说能力有限,索性使用 php版本的数组分页,解决问题。 经常有用到分页,索性做一个简单封装、

测试用例

复制代码
  QTime curtime = QTime::currentTime();

        nHour = curtime.hour();
        nMin = curtime.minute();
        nSec = curtime.second();

  setTimeBtnWidget(nHour, 24, ceil(nHour / 6), 6,1, ui->verticalLayout_10);


  setTimeBtnWidget(nMin, 60, ceil(nMin / 6), 6, 2, ui->verticalLayout_2);


  setTimeBtnWidget(nSec, 60, ceil(nSec / 6), 6, 3, ui->verticalLayout_4);

使用方法

复制代码
	/**
	* @breif  : 设置 时间上下按钮
	* @param  : index 第几个
	* @param  : count 总数量
	* @param  : page  第几页
	* @param  : size  显示数量
	* @param  : type  类型
	* @param  : QLayout  布局名称
	* @return : void
	* @date   : 2024/01/10 16:28
	*/
	void setTimeBtnWidget(int index,int count,int page,int size,int type, QLayout* layout);

封装函数

复制代码
void CCalendarWidget::setTimeBtnWidget(int index,int count,int page,int size,int type, QLayout* layout)
{
    clearLayout(layout);
    
    int  tatakPage = (int)ceil(count / size);

    int offset = (page - 1) * size;
    for (int i = 0; i < 8; i++) {

        QPushButton* pBtn = new QPushButton();
     
        if (i == 0)
        {
            //星期widget
            QWidget* upBtnWidget = new QWidget;
            upBtnWidget->setMaximumWidth(40);
            //星期布局
            QHBoxLayout* layoutUpWidget = new QHBoxLayout(upBtnWidget);

            pBtn->setFixedSize(10, 6);
            pBtn->setChecked(true);
            pBtn->setStyleSheet(
                "border-image:url(:/images/Resources/images/CCalendarWidget/upBtn.png);border:none;font-size: 14px;color:#FFFFFF;");

            pBtn->setCursor(Qt::PointingHandCursor);

            layoutUpWidget->spacing();
            layoutUpWidget->addWidget(pBtn);
            layoutUpWidget->spacing();

            layout->addWidget(upBtnWidget);

            connect(pBtn, &QPushButton::clicked, [=]
            {
                if (timeIndex >= 0 && timeIndex <= tatakPage)
                {
                    setTimeBtnWidget(timeIndex * size+3,count, timeIndex, size, type, layout);
                    timeIndex--;
                }
                else {
                    timeIndex = 0;
                }
            });
        }

        if (i == 7)
        {   
            //星期widget
            QWidget* downBtnWidget = new QWidget;
            downBtnWidget->setMaximumWidth(40);
            //星期布局
            QHBoxLayout* layoutDownWidget = new QHBoxLayout(downBtnWidget);

            pBtn->setFixedSize(10, 6);
            pBtn->setChecked(true);
            pBtn->setStyleSheet(
                "border-image:url(:/images/Resources/images/CCalendarWidget/downBtn.png);border:none;font-size: 14px;color:#FFFFFF;");
            pBtn->setCursor(Qt::PointingHandCursor);

            layoutDownWidget->spacing();
            layoutDownWidget->addWidget(pBtn);
            layoutDownWidget->spacing();

            layout->addWidget(downBtnWidget);

            connect(pBtn, &QPushButton::clicked, [=]
            {
                if (timeIndex >= 0 && timeIndex < tatakPage)
                {
                    setTimeBtnWidget(timeIndex * size + 3,count, timeIndex,size, type, layout);
                    timeIndex++;
                }
                else {
                    timeIndex = tatakPage-1;
                }
            });
        }

        if (i > 0 && i < 7)
        {
            if ((type == 1 && page * size + i != 24) || (type == 2 && page * size + i != 60) || (type == 3 && page * size + i != 60))
            {
                pBtn->setChecked(true);

                connect(pBtn, &QPushButton::clicked, [=]
                    {
                        int index = pBtn->text().toInt();
                        setTimeBtnWidget(index, count, page, size, type, layout);

                        if (type == 1)
                        {
                            nHour = index;
                        }
                        if (type == 2)
                        {
                            nMin = index;
                        }
                        if (type == 3)
                        {
                            nSec = index;
                        }
                        setTime();
                    });
            }
            else {
                pBtn->setChecked(false);
            }
            pBtn->setFixedSize(40, 26);
            pBtn->setText(QString::number(page * size + i));
            pBtn->setCursor(Qt::PointingHandCursor);
            layout->addWidget(pBtn);
            layout->spacing();
        }

        if (page * size + i == index)
        {
            pBtn->setChecked(true);

            pBtn->setStyleSheet(
                "background:#0D85FF;"
            );
        }
    }
}
相关推荐
2601_966949652 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
晨曦中的暮雨4 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪5 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风5 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
2601_962885727 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
choumin7 小时前
C++中万能引用与std::forward的作用和用法
c++·万能引用·std forward
Wang's Blog7 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
下一站春风里8 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
天外飞雨道沧桑9 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
hhhjhl9 小时前
Yup 跨端三方库仓颉适配全流程
java·开发语言