我正在尝试创建一个基于模型/视图概念的应用程序。我需要打开一些目录,在其中找到所有 img 并将它们显示在 MainWindow(QMainWindow 的子类)中。体系结构是这样的:1)通过QDir创建“好”文件名的QStringList(使用文件名按扩展过滤)。2) 创建 QStandardItemModel 并用 QStandardItem (QIcon(QImage(fileName).scaled(QSize)), fileName) 填充它。3) 使用 QListView 显示模型中的数据。
但有一些问题。首先 - theModel.columnCount 是,例如 52,但屏幕上只显示一张图片并且没有它的名称。
有人可以帮我:1)如何正确填充模型?我的方法:
QDir dirs(dir);
QStringList imgs = dirs.entryList(QStringList() << "*.jpg" << "*.jpeg" << "*.bmp" << "*.png");
itemModel->clear();
QList<QStandardItem *> listItem;
for(int i = 0; i < imgs.count(); ++i){
QImage image = QImage(dir + "/" + imgs.at(i)).scaled(QSize(size().width()/4, size().height()/4));
QStandardItem *item = new QStandardItem();
item->setIcon(QIcon(QPixmap::fromImage(image)));
item->setData(imgs.at(i));
listItem << item;
}
itemModel->appendRow(listItem);
此代码位于 MainWindow 类的一个插槽中。
2)据我了解,我的视图会自动更新,因此它应该显示模型中的所有数据。我是对的,还是需要一些代码?
3)也许我在模型和视图的初始化方面没有做任何事情(代码在 MainWindow 类的构造函数中):
itemModel = new QStandardItemModel(this);
listView = new QListView(this);
listView->setModel(itemModel);
// listView->setFlow(QListView::LeftToRight);
// listView->setLayoutMode(QListView::Batched);
listView->setViewMode(QListView::IconMode);
listView->setResizeMode(QListView::Adjust);
// listView->setGridSize(QSize(size().width()/4, size().height()/4));
listView->setIconSize(QSize(size().width()/4, size().height()/4));
setCentralWidget(listView);