qt c++ QListView 使用横向布局,并且使用自定义代理一个model插入图像和文本,写一个例子
时间: 2024-11-03 22:16:14 浏览: 40
在Qt C++中,QListView是一个用于显示模型数据的视图控件,如果你想让它使用横向布局并显示自定义代理模型,其中包含图像和文本,你可以这样做:
首先,确保已经包含了所需的库头文件:
```cpp
#include <QApplication>
#include <QListView>
#include <QStandardItemModel>
#include <QStyledItemDelegate>
#include <QPixmap>
#include <QImageReader>
```
然后创建一个自定义代理类,继承自`QStyledItemDelegate`,并添加对图片的支持:
```cpp
class ImageDelegate : public QStyledItemDelegate {
public:
explicit ImageDelegate(QObject *parent = nullptr)
: QStyledItemDelegate(parent) {}
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const override {
// ... 从这里开始处理图片和文字的绘制
QPixmap pixmap;
QImage image = QImage(":/images/example.jpg"); // 替换为你的图片路径
if (!image.isNull()) {
pixmap.loadFromData(image.toImage());
}
QRect textRect = option.rect;
painter->drawPixmap(textRect.x(), textRect.y(), pixmap.scaled(
textRect.width(), textRect.height(),
Qt::KeepAspectRatio, Qt::SmoothTransformation));
// 继续绘制文本,如果有的话
QStyledItemDelegate::paint(painter, option, index);
}
};
```
接下来,在主窗口中设置QListView和模型:
```cpp
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建标准项模型
QStandardItemModel model;
// 添加一些带图片和文本的项目
auto item = new QStandardItem("Title");
item->setData(new QIcon(":/images/example.jpg"), Qt::DecorationRole); // 设置图标
model.setItem(0, 0, item);
// 创建QListView
QListView listView;
listView.setModel(&model);
listView.setItemDelegate(new ImageDelegate());
// 指定列宽,让列表按照宽度展示图片
listView.setResizeMode(QListView::FixedWidth);
listView.setViewMode(QListView::ListMode);
listView.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// 设置窗口大小和位置
QMainWindow window;
window.setCentralWidget(&listView);
window.show();
return app.exec();
}
```
阅读全文