在Qt Creator中创建一个列表,每行有3列數據,每頁只能放10行,并实现翻页效果的完整代碼
时间: 2024-03-21 18:37:47 浏览: 82
以下是在Qt Creator中使用QListWidget实现翻页效果的完整代码:
```
#include <QtWidgets>
const int PAGE_SIZE = 10; // 每页显示的行数
int currentPage = 0; // 当前页码
class MyWidget : public QWidget {
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
// 创建列表控件
listWidget = new QListWidget(this);
listWidget->setViewMode(QListWidget::ListMode);
listWidget->setSelectionMode(QAbstractItemView::NoSelection);
listWidget->setResizeMode(QListWidget::Adjust);
// 添加数据
for (int i = 0; i < 30; i++) {
QString text = QString("Item %1").arg(i + 1);
QListWidgetItem *item = new QListWidgetItem(text);
item->setData(Qt::UserRole, i); // 存储数据,此处为行号
listWidget->addItem(item);
}
// 创建翻页按钮
btnPrev = new QPushButton("上一页", this);
btnNext = new QPushButton("下一页", this);
// 连接槽函数
connect(btnPrev, &QPushButton::clicked, this, &MyWidget::on_btnPrev_clicked);
connect(btnNext, &QPushButton::clicked, this, &MyWidget::on_btnNext_clicked);
// 创建布局
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(listWidget);
QHBoxLayout *hlayout = new QHBoxLayout();
hlayout->addWidget(btnPrev);
hlayout->addWidget(btnNext);
layout->addLayout(hlayout);
// 显示第一页
for (int i = 0; i < PAGE_SIZE; i++) {
listWidget->item(i)->setHidden(false);
}
currentPage = 1;
}
private:
QListWidget *listWidget; // 列表控件
QPushButton *btnPrev; // 上一页按钮
QPushButton *btnNext; // 下一页按钮
private slots:
void on_btnPrev_clicked() {
if (currentPage <= 1) {
return;
}
int start = (currentPage - 2) * PAGE_SIZE;
int end = (currentPage - 1) * PAGE_SIZE - 1;
for (int i = start; i <= end; i++) {
listWidget->item(i)->setHidden(false);
}
start = (currentPage - 1) * PAGE_SIZE;
end = currentPage * PAGE_SIZE - 1;
for (int i = end + 1; i < listWidget->count(); i++) {
listWidget->item(i)->setHidden(true);
}
for (int i = 0; i < start; i++) {
listWidget->item(i)->setHidden(true);
}
currentPage--;
}
void on_btnNext_clicked() {
int totalPage = qCeil(listWidget->count() / (double)PAGE_SIZE); // 总页数
if (currentPage >= totalPage) {
return;
}
int start = currentPage * PAGE_SIZE;
int end = (currentPage + 1) * PAGE_SIZE - 1;
for (int i = start; i <= end; i++) {
listWidget->item(i)->setHidden(false);
}
start = (currentPage - 1) * PAGE_SIZE;
end = currentPage * PAGE_SIZE - 1;
for (int i = 0; i < start; i++) {
listWidget->item(i)->setHidden(true);
}
for (int i = end + 1; i < listWidget->count(); i++) {
listWidget->item(i)->setHidden(true);
}
currentPage++;
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
```
在代码中,我们创建了一个继承自QWidget的自定义控件MyWidget。在MyWidget的构造函数中,我们首先创建了列表控件,并添加了30个条目;然后,创建了上一页和下一页按钮,并连接了它们的槽函数;最后,创建了布局,并将列表控件和按钮添加到布局中,并显示了第一页的数据。
在槽函数on_btnPrev_clicked和on_btnNext_clicked中,我们实现了翻页效果的逻辑,具体实现方式与前面的代码一样。
在main函数中,我们创建了MyWidget的实例,并显示出来。
阅读全文