qt qml 创建分页组件

本文详细介绍了如何在QtQML中创建一个名为MyPagination的分页组件,包括设置当前页、前后翻页、跳转到指定页以及显示省略号等功能,展示了如何在`main.qml`中调用该组件并展示效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

qt qml 创建分页组件

创建组件MyPagination

import QtQuick 2.12
import QtQuick.Controls 2.12

Item {
    id: pagination

    property int currentPage: 1
    property int pageSize: 10
    property int totalItems: 100
    property int visiblePages: 3 // 可见的页码数量

    function nextPage() {
        if (currentPage < maxPage + 1) {
            currentPage++;
            updateModel();
        }
    }

    function previousPage() {
        if (currentPage > 1) {
            currentPage--;
            updateModel();
        }
    }

    function goToPage(page) {
        if (page >= 0 && page <= maxPage) {
            currentPage = page;
            lbl.text = currentPage.toString();
            updateModel();
        }
    }

    function updateModel() {
        // 更新model数据的逻辑,这里仅仅输出当前页的内容作为示例
        var startIndex = currentPage * pageSize;
        var endIndex = Math.min(startIndex + pageSize, totalItems) - 1;

        lbl.text = currentPage.toString();
        console.log("Current Page:", currentPage);
        console.log("Start Index:", startIndex);
        console.log("End Index:", endIndex);
    }

    function reset() {
        currentPage = 0;
        updateModel();
    }

    function getMaxPage() {
        return Math.ceil(totalItems / pageSize) - 1;
    }

    property int maxPage: getMaxPage()


    Row {
        spacing: 10

        Text {
            id: lbl
            text: qsTr("text")
            color: "white"
        }

        //前进一页
        Button {
            text: "<"
            onClicked: pagination.previousPage()
        }

        // 首页按钮
        Button {
            text: "1"
            onClicked: {
                currentPage = 1;
                lbl.text = currentPage.toString();
            }
        }

        // 左边省略号折叠按钮
        Button {
            text: "..."
            visible: currentPage > 3
            onClicked: {
                currentPage = currentPage - visiblePages < 0 ? 1 : currentPage - visiblePages
            }
        }

        // 页码按钮
        Repeater {
            model: maxPage > 1 ? maxPage - 1 : 0
            delegate: Button {
                text: (index + 2).toString()
                visible:(index + 2) === currentPage || Math.abs(index + 2 - currentPage) <= 1
                onClicked: {
                    pagination.goToPage(index + 2)
                }
            }
        }

        // 右边省略号折叠按钮
        Button {
            text: "..."
            visible: currentPage < maxPage - 1
            onClicked: {
                currentPage = currentPage + visiblePages > maxPage ? maxPage : currentPage + visiblePages
            }
        }

        // 末页按钮
        Button {
            text: (maxPage + 1).toString()
            visible: maxPage + 1 > 1
            onClicked: {
                currentPage = maxPage + 1;
                lbl.text = currentPage.toString();
            }
        }

        Button {
            text: ">"
            onClicked: pagination.nextPage()
        }
    }

    Component.onCompleted: {
        updateModel()
    }
}

main.qml中调用

                        Rectangle {
                            color: "#13131A"
                            MyPagination{
                                id : pagination
                                pageSize: 10
                                totalItems: 31
                            }
                        }

组件效果:
点击页面自动切换页码,分三段隐藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cgoo_0102

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值