用QT的QlistView写60个带有图片的按钮,每页24个,带上一页下一页功能
时间: 2024-04-30 08:18:49 浏览: 236
可以虑使用QListView和QStandardItemModel实现。
首先,需要在Qt Creator的“资源浏览器”中添加图片资源,方法是右键项目->添加新文件->Qt->Qt Resource File,然后在资源浏览器中右键->添加新文件->添加图片。接着在代码中使用QPixmap加载图片资源。
然后,创建QStandardItemModel并向其中添加24个item,每个item包含一个QPixmap和一个QStandardItem。将QStandardItemModel设置为QListView的model,然后将QListView添加到窗口中。
最后,创建上一页和下一页按钮,点击按钮时更新QStandardItemModel中的item,同时更新QListView显示的内容。
下面是代码示例:
```
// 添加图片资源
QPixmap img1(":/images/img1.png");
QPixmap img2(":/images/img2.png");
QPixmap img3(":/images/img3.png");
...
QPixmap img60(":/images/img60.png");
// 创建QStandardItemModel
QStandardItemModel *model = new QStandardItemModel();
for (int i = 0; i < 24; i++) {
QStandardItem *item = new QStandardItem();
item->setData(QVariant(img1), Qt::DecorationRole); // 设置图片
model->appendRow(item);
}
// 创建QListView
QListView *listView = new QListView();
listView->setModel(model);
// 创建上一页和下一页按钮
QPushButton *prevBtn = new QPushButton("上一页");
QPushButton *nextBtn = new QPushButton("下一页");
connect(prevBtn, &QPushButton::clicked, [=]() {
// 更新QStandardItemModel中的item
int currentIndex = model->index(0, 0).row();
if (currentIndex - 24 >= 0) {
for (int i = currentIndex; i < currentIndex + 24; i++) {
QStandardItem *item = model->item(i);
item->setData(QVariant(img1), Qt::DecorationRole); // 更新图片
}
listView->scrollTo(model->index(currentIndex - 24, 0)); // 滚动到上一页
}
});
connect(nextBtn, &QPushButton::clicked, [=]() {
// 更新QStandardItemModel中的item
int currentIndex = model->index(0, 0).row();
if (currentIndex + 24 < 60) {
for (int i = currentIndex; i < currentIndex + 24; i++) {
QStandardItem *item = model->item(i - currentIndex);
item->setData(QVariant(img2), Qt::DecorationRole); // 更新图片
}
listView->scrollTo(model->index(currentIndex + 24, 0)); // 滚动到下一页
}
});
// 将QListView和按钮添加到窗口中
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(listView);
layout->addWidget(prevBtn);
layout->addWidget(nextBtn);
QWidget *widget = new QWidget();
widget->setLayout(layout);
setCentralWidget(widget);
```
阅读全文