以下是一个简单的实现分页显示数据的 QT 程序,它使用 QTableWidget 来显示数据,并且提供了“首页”、“上一页”、“下一页”、“末页”和“跳转”按钮来控制页码,每页显示的记录数量可以由用户设置。

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QTableWidget>
#include <QtWidgets/QHeaderView>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr)
        : QMainWindow(parent)
    {
        // 设置窗口标题和大小
        setWindowTitle('分页显示数据');
        setFixedSize(640, 480);

        // 初始化控件
        initWidgets();

        // 加载数据
        loadData(0, pageSize);
    }

private:
    // 初始化控件
    void initWidgets()
    {
        // 首页按钮
        QPushButton *firstButton = new QPushButton('首页', this);
        firstButton->move(20, 20);
        connect(firstButton, &QPushButton::clicked, this, &MainWindow::onFirstClicked);

        // 上一页按钮
        QPushButton *prevButton = new QPushButton('上一页', this);
        prevButton->move(100, 20);
        connect(prevButton, &QPushButton::clicked, this, &MainWindow::onPrevClicked);

        // 下一页按钮
        QPushButton *nextButton = new QPushButton('下一页', this);
        nextButton->move(180, 20);
        connect(nextButton, &QPushButton::clicked, this, &MainWindow::onNextClicked);

        // 末页按钮
        QPushButton *lastButton = new QPushButton('末页', this);
        lastButton->move(260, 20);
        connect(lastButton, &QPushButton::clicked, this, &MainWindow::onLastClicked);

        // 跳转按钮
        QPushButton *jumpButton = new QPushButton('跳转', this);
        jumpButton->move(340, 20);
        connect(jumpButton, &QPushButton::clicked, this, &MainWindow::onJumpClicked);

        // 页面大小标签和编辑框
        QLabel *pageSizeLabel = new QLabel('每页显示:', this);
        pageSizeLabel->move(420, 20);

        QLineEdit *pageSizeEdit = new QLineEdit('100', this);
        pageSizeEdit->move(500, 20);

        connect(pageSizeEdit, &QLineEdit::editingFinished, [=]() {
            pageSize = pageSizeEdit->text().toInt();
            loadData(0, pageSize);
        });

        // 表格
        tableWidget = new QTableWidget(this);
        tableWidget->move(20, 60);
        tableWidget->setFixedSize(600, 400);
        tableWidget->setColumnCount(2);
        tableWidget->setHorizontalHeaderLabels(QStringList() << '编号' << '数据');

        // 设置表头样式
        QHeaderView *header = tableWidget->horizontalHeader();
        header->setSectionResizeMode(QHeaderView::Stretch);
        header->setStyleSheet('QHeaderView::section { background-color: #f0f0f0; }');
    }

    // 加载数据
    void loadData(int start, int count)
    {
        // 清空表格
        tableWidget->setRowCount(0);

        // 生成数据
        for (int i = start; i < start + count && i < data.size(); i++) {
            int row = tableWidget->rowCount();
            tableWidget->insertRow(row);

            QTableWidgetItem *item1 = new QTableWidgetItem(QString::number(i));
            QTableWidgetItem *item2 = new QTableWidgetItem(data[i]);

            tableWidget->setItem(row, 0, item1);
            tableWidget->setItem(row, 1, item2);
        }

        // 更新页码和状态
        int totalPages = (data.size() + pageSize - 1) / pageSize;
        int currentPage = start / pageSize + 1;

        QString status = QString('第 %1/%2 页,共 %3 条数据').arg(currentPage).arg(totalPages).arg(data.size());
        statusBar()->showMessage(status);
    }

    // 首页按钮点击事件
    void onFirstClicked()
    {
        loadData(0, pageSize);
    }

    // 上一页按钮点击事件
    void onPrevClicked()
    {
        int start = (currentPage - 2) * pageSize;
        loadData(start, pageSize);
    }

    // 下一页按钮点击事件
    void onNextClicked()
    {
        int start = currentPage * pageSize;
        loadData(start, pageSize);
    }

    // 末页按钮点击事件
    void onLastClicked()
    {
        int start = (data.size() / pageSize) * pageSize;
        loadData(start, pageSize);
    }

    // 跳转按钮点击事件
    void onJumpClicked()
    {
        bool ok;
        int page = QInputDialog::getInt(this, '跳转', '请输入要跳转的页码', currentPage, 1, data.size() / pageSize + 1, 1, &ok);

        if (ok) {
            int start = (page - 1) * pageSize;
            loadData(start, pageSize);
        }
    }

private:
    QTableWidget *tableWidget;  // 表格控件
    QVector<QString> data = {'数据1', '数据2', '数据3', '数据4', '数据5', '数据6', '数据7', '数据8', '数据9', '数据10',
                             '数据11', '数据12', '数据13', '数据14', '数据15', '数据16', '数据17', '数据18', '数据19', '数据20',
                             '数据21', '数据22', '数据23', '数据24', '数据25', '数据26', '数据27', '数据28', '数据29', '数据30'};  // 数据源
    int currentPage = 1;       // 当前页码
    int pageSize = 100;         // 页面大小
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MainWindow w;
    w.show();

    return a.exec();
}

#include "main.moc"

该程序使用了一个 QVector 作为数据源,包含 30 条数据。在程序中,我们使用了一个 QTableWidget 来显示数据,每页最多显示 100 条记录。用户可以通过点击“首页”、“上一页”、“下一页”、末页、“跳转”按钮来加载想要显示的记录。

在加载数据时,我们根据起始位置和页面大小来生成数据,并将数据填充到表格中。同时,我们还需要根据当前页码和总页数来更新状态栏的显示。

通过这个程序,我们可以学习到如何使用 QT 来创建一个简单的分页显示数据的应用程序。

QT 分页显示数据 - 实现数据分页展示

原文地址: https://www.cveoy.top/t/topic/mU6q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录