亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt 自定義分頁控件的實現(xiàn)

 更新時間:2023年11月10日 09:35:08   作者:凝望星辰  
在應用程序開發(fā)時經常會遇到數(shù)據分頁的需求,每一頁展示特定數(shù)量的數(shù)據,通過點擊按鈕翻頁或者輸入頁碼跳轉到指定頁,本文就來介紹一下Qt 自定義分頁控件的實現(xiàn),感興趣的可以了解一下

前言

在應用程序開發(fā)時經常會遇到數(shù)據分頁的需求,每一頁展示特定數(shù)量的數(shù)據,通過點擊按鈕翻頁或者輸入頁碼跳轉到指定頁。 本文介紹一個自定義分頁控件,基本上實現(xiàn)了作為一個分頁控件該有的功能。

1、功能描述

本分頁控件支持顯示總頁數(shù),支持顯示當前頁碼,支持跳轉到指定頁,支持上一頁和下一頁,支持首頁和尾頁,支持顯示每頁數(shù)量,支持數(shù)據總量顯示。

2、代碼實現(xiàn)

2.1 ui文件

本分頁控件采用ui文件來布局內部的組件,具體布局如下圖所示:

2.2 頭文件

頭文件中每個方法都作了注釋,一眼就能明白其功能。

#include <QWidget>

namespace Ui {
class ZPageWidget;
}

class  ZPageWidget : public QWidget
{
    Q_OBJECT

public:
    explicit ZPageWidget(QWidget *parent = nullptr);
    ~ZPageWidget();

    /**
     * @brief setPageCount 設置總頁數(shù)
     * @param count 總頁數(shù)
     */
    void setPageCount(int count);
    int pageCount() const { return m_pageCount; }

    /**
     * @brief setCurrentPage 設置當前頁
     * @param page 當前頁碼
     */
    void setCurrentPage(int page);
    int currentPage() const{ return m_currentPage; }

    /**
     * @brief setDataCount 設置數(shù)據總量
     * @param cnt 數(shù)據總量
     */
    void setDataCount(int cnt);
    int dataCount() const  { return m_dataCount; }

    /**
     * @brief setPerpageDataCount 設置每頁數(shù)據量
     * @param cnt 每頁數(shù)據量
     */
    void setPerpageDataCount(int cnt);
    int perpageDataCount() const  { return m_perpageDataCount; }

signals:
    /**
     * @brief sign_pageChanged 頁碼變化信號
     * @param page 當前頁碼
     */
    void sign_pageChanged(int page);

private:
    /**
     * @brief pageChanged 切換頁碼
     */
    void pageChanged();

private slots:
    /**
     * @brief slot_previousPageBtnClicked 前一頁按鈕槽函數(shù)
     */
    void slot_previousPageBtnClicked();

    /**
     * @brief slot_nextPageBtnClicked 后一頁按鈕槽函數(shù)
     */
    void slot_nextPageBtnClicked();
    /**
     * @brief slot_firstPageBtnClicked 首頁按鈕槽函數(shù)
     */
    void slot_firstPageBtnClicked();
    /**
     * @brief slot_lastPageBtnClicked 尾頁按鈕槽函數(shù)
     */
    void slot_lastPageBtnClicked();

    /**
     * @brief slot_skipPageBtnClicked 跳轉頁碼按鈕槽函數(shù)
     */
    void slot_skipPageBtnClicked();

private:
    Ui::ZPageWidget *ui;

    int m_pageCount;
    int m_currentPage;
    int m_dataCount;
    int m_perpageDataCount;
};

2.3 源碼文件

ZPageWidget::ZPageWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::ZPageWidget)
    , m_pageCount(1)
    , m_currentPage(1)
{
    ui->setupUi(this);

    ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("[0-9]+$")));

    connect(ui->btn_previous, SIGNAL(clicked()), this, SLOT(slot_previousPageBtnClicked()));
    connect(ui->btn_next, SIGNAL(clicked()), this, SLOT(slot_nextPageBtnClicked()));
    connect(ui->btn_first, SIGNAL(clicked()), this, SLOT(slot_firstPageBtnClicked()));
    connect(ui->btn_last, SIGNAL(clicked()), this, SLOT(slot_lastPageBtnClicked()));
    connect(ui->btn_skip, SIGNAL(clicked()), this, SLOT(slot_skipPageBtnClicked()));
}

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

void ZPageWidget::setPageCount(int count)
{
    m_pageCount = count;
    m_pageCount = m_pageCount > 0 ? m_pageCount : 1;
    if(m_currentPage > m_pageCount)
    {
        m_currentPage = m_pageCount;
    }

    pageChanged();
}

void ZPageWidget::setCurrentPage(int page)
{
    m_currentPage = page;
}

void ZPageWidget::setDataCount(int cnt)
{
    m_dataCount = cnt;
    ui->lb_totalData->setText(QString("%1:%2").arg(QString::fromLocal8Bit("總數(shù)")).arg(cnt));
}

void ZPageWidget::setPerpageDataCount(int cnt)
{
    m_perpageDataCount = cnt;
    ui->lb_perPageData->setText(QString("%1:%2").arg(QString::fromLocal8Bit("每頁")).arg(cnt));
}

void ZPageWidget::pageChanged()
{
    emit sign_pageChanged(m_currentPage);
    ui->lb_pageInfo->setText(QString("%1/%2").arg(m_currentPage).arg(m_pageCount));
}

void ZPageWidget::slot_previousPageBtnClicked()
{
    if(m_currentPage > 1)
    {
        m_currentPage--;
        pageChanged();
    }
}

void ZPageWidget::slot_nextPageBtnClicked()
{
    if(m_currentPage < m_pageCount)
    {
        m_currentPage++;
        pageChanged();
    }
}

void ZPageWidget::slot_firstPageBtnClicked()
{
    if(m_currentPage != 1)
    {
        m_currentPage = 1;
        pageChanged();
    }
}

void ZPageWidget::slot_lastPageBtnClicked()
{
    if(m_pageCount != m_currentPage)
    {
        m_currentPage = m_pageCount;
        pageChanged();
    }
}

void ZPageWidget::slot_skipPageBtnClicked()
{
    int page = ui->lineEdit->text().toInt();
    ui->lineEdit->clear();
    if(page > 0 && page <= m_pageCount)
    {
        m_currentPage = page;
        pageChanged();
    }
}

2.4 設計思路

該分頁控件的設計思路比較簡單清晰,根據分頁控件支持的功能,將一組QWidget控件封裝在一起,在各個按鈕槽函數(shù)中重新計算頁碼,并將當前頁碼用信號的方式,傳遞給使用者,完成頁碼與數(shù)據的同步。

3、示例

下面這個示例代碼演示了如何使用該分頁控件。分頁控件一般與列表或表格結合使用,當頁碼改變時更新列表或表格中的數(shù)據。下面以分頁列表為例來展示,新建一個設計師界面類,命名為PageControlTest,ui文件如下圖所示:

測試代碼:

PageControlTest::PageControlTest(QWidget *parent) :
                                                    QWidget(parent),
                                                    ui(new Ui::PageControlTest)
{
    ui->setupUi(this);

    m_dataList << QString::fromLocal8Bit("1") << QString::fromLocal8Bit("2") << QString::fromLocal8Bit("3")
               << QString::fromLocal8Bit("4") << QString::fromLocal8Bit("5") << QString::fromLocal8Bit("6")
               << QString::fromLocal8Bit("7") << QString::fromLocal8Bit("8") << QString::fromLocal8Bit("9")
               << QString::fromLocal8Bit("10") << QString::fromLocal8Bit("11") << QString::fromLocal8Bit("12")
               << QString::fromLocal8Bit("13");

    int perpageCnt = 10;
    ui->pageWidget->setPerpageDataCount(perpageCnt);
    ui->pageWidget->setDataCount(m_dataList.size());

    connect(ui->pageWidget, SIGNAL(sign_pageChanged(int)), this, SLOT(slot_pageChanged(int)));
    int pageCount = ceil(m_dataList.size() / (double)perpageCnt);
    ui->pageWidget->setPageCount(pageCount);

}

void PageControlTest::loadData()
{
    int offset = ui->pageWidget->perpageDataCount() * (ui->pageWidget->currentPage() - 1);
    QStringList currPageDataList = m_dataList.mid(offset, ui->pageWidget->perpageDataCount());

    ui->listWidget->clear();
    for (int var = 0; var < currPageDataList.size(); ++var)
    {
        ui->listWidget->addItem(currPageDataList[var]);
    }
}

void PageControlTest::slot_pageChanged(int page)
{
    loadData();
}

效果:

4、總結

到此這篇關于Qt 自定義分頁控件的實現(xiàn)的文章就介紹到這了,更多相關Qt 自定義分頁控件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言實現(xiàn)洗牌與發(fā)牌游戲

    C語言實現(xiàn)洗牌與發(fā)牌游戲

    這篇文章主要為大家詳細介紹了C語言洗牌與發(fā)牌游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語言實現(xiàn)小型工資管理系統(tǒng)

    C語言實現(xiàn)小型工資管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)小型工資管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++結構體字節(jié)對齊和共用體大小

    C++結構體字節(jié)對齊和共用體大小

    這篇文章主要介紹了C++結構體字節(jié)對齊和共用體大小,結構體內存對齊在筆試和面試中經常被問到,所以這篇文章做個總結,首先通過代碼驗證不同結構體的內存大小,需要的朋友可以參考下
    2021-11-11
  • C++實現(xiàn)LeetCode(49.群組錯位詞)

    C++實現(xiàn)LeetCode(49.群組錯位詞)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(49.群組錯位詞),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++11中多線程編程-std::async的深入講解

    C++11中多線程編程-std::async的深入講解

    這篇文章主要給大家介紹了關于C++11中多線程編程-std::async的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • C++使用ifstream讀取文件內容的示例詳解

    C++使用ifstream讀取文件內容的示例詳解

    這篇文章主要為大家詳細介紹了C++如何使用ifstream讀取文件內容的功能,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的可以了解一下
    2023-03-03
  • C語言實現(xiàn)訪問及查詢MySQL數(shù)據庫的方法

    C語言實現(xiàn)訪問及查詢MySQL數(shù)據庫的方法

    這篇文章主要介紹了C語言實現(xiàn)訪問及查詢MySQL數(shù)據庫的方法,涉及C語言基于libmysql.lib實現(xiàn)訪問MySQL數(shù)據庫的相關操作技巧,需要的朋友可以參考下
    2018-01-01
  • C語言 聯(lián)合(union)用法案例詳解

    C語言 聯(lián)合(union)用法案例詳解

    這篇文章主要介紹了C語言 聯(lián)合(union)用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • Qt5.9程序打包發(fā)布的實現(xiàn)

    Qt5.9程序打包發(fā)布的實現(xiàn)

    本文主要介紹了Qt5.9程序打包發(fā)布的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • 使用c++實現(xiàn)OpenCV繪制圓端矩形

    使用c++實現(xiàn)OpenCV繪制圓端矩形

    這篇文章主要介紹了使用c++實現(xiàn)OpenCV繪制圓端矩形,其中著重的講解了OpenCV使用過程中需要注意的一些小細節(jié),避免浪費大家在開發(fā)過程中浪費多余的時間
    2021-08-08

最新評論