QT 分页显示数据 - 实现数据分页展示
以下是一个简单的实现分页显示数据的 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 来创建一个简单的分页显示数据的应用程序。
原文地址: https://www.cveoy.top/t/topic/mU6q 著作权归作者所有。请勿转载和采集!