qt creator实现tableview的翻页功能,每页显示10行数据的代碼
时间: 2024-03-28 15:42:38 浏览: 76
以下是使用 Qt Creator 实现 TableView 翻页功能,每页显示10行数据的示例代码:
```cpp
// 定义每页显示的数据行数
const int ROWS_PER_PAGE = 10;
// 初始化表格模型
QStandardItemModel* model = new QStandardItemModel(0, 2, this);
model->setHeaderData(0, Qt::Horizontal, tr("Name"));
model->setHeaderData(1, Qt::Horizontal, tr("Age"));
// 填充数据到表格模型中
for (int i = 0; i < 100; ++i) {
QStandardItem* nameItem = new QStandardItem(QString("Name %1").arg(i+1));
QStandardItem* ageItem = new QStandardItem(QString("%1").arg(20+i));
model->appendRow({nameItem, ageItem});
}
// 创建 TableView 控件
QTableView* tableView = new QTableView(this);
tableView->setModel(model);
// 设置 TableView 分页属性
tableView->setAlternatingRowColors(true);
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
tableView->setSelectionMode(QAbstractItemView::SingleSelection);
tableView->setSortingEnabled(true);
tableView->horizontalHeader()->setStretchLastSection(true);
tableView->verticalHeader()->hide();
tableView->setShowGrid(false);
// 创建翻页控件
QHBoxLayout* pageLayout = new QHBoxLayout;
QPushButton* prevButton = new QPushButton(tr("Prev"));
QPushButton* nextButton = new QPushButton(tr("Next"));
QLabel* currentPageLabel = new QLabel(tr("1"));
QLabel* totalPageLabel = new QLabel(tr("/10"));
pageLayout->addWidget(prevButton);
pageLayout->addWidget(currentPageLabel);
pageLayout->addWidget(totalPageLabel);
pageLayout->addWidget(nextButton);
// 设置翻页控件的样式
prevButton->setFixedSize(50, 25);
nextButton->setFixedSize(50, 25);
currentPageLabel->setFixedWidth(30);
totalPageLabel->setFixedWidth(30);
// 初始化 TableView 的显示
tableView->setModel(model->invisibleRootItem()->model());
tableView->setRowHidden(0, false);
tableView->setRowHidden(ROWS_PER_PAGE, true);
// 连接翻页按钮的槽函数
int currentPage = 1;
int totalPage = qCeil(model->rowCount() / (qreal)ROWS_PER_PAGE);
connect(prevButton, &QPushButton::clicked, [=]() {
if (currentPage > 1) {
--currentPage;
currentPageLabel->setText(QString::number(currentPage));
tableView->setRowHidden((currentPage - 1) * ROWS_PER_PAGE, false);
tableView->setRowHidden(currentPage * ROWS_PER_PAGE, true);
}
});
connect(nextButton, &QPushButton::clicked, [=]() {
if (currentPage < totalPage) {
++currentPage;
currentPageLabel->setText(QString::number(currentPage));
tableView->setRowHidden((currentPage - 2) * ROWS_PER_PAGE, true);
tableView->setRowHidden((currentPage - 1) * ROWS_PER_PAGE, false);
}
});
// 添加 TableView 和翻页控件到窗口中
QVBoxLayout* mainLayout = new QVBoxLayout;
mainLayout->addWidget(tableView);
mainLayout->addLayout(pageLayout);
setLayout(mainLayout);
```
该示例代码中,首先定义了每页显示的数据行数 `ROWS_PER_PAGE`,然后初始化了一个包含 100 条数据的表格模型,并填充数据到模型中。接着创建了一个 TableView 控件和一个翻页控件,并设置了 TableView 的分页属性和样式。最后通过连接翻页按钮的槽函数实现了 TableView 的翻页功能。
阅读全文