带Qt的img查看器
我正在尝试创建一个基于模型/视图概念的应用程序。 我需要打开一些目录,找到其中的所有IMG,并在MainWindow(QMainWindow的子类)中显示它们。 架构是这样的: 1) 通过QDir创建“良好”文件名的QStringList(使用扩展名筛选文件名)。 2) 创建QStandardItemModel并用QStandardItem(QIcon(QImage(fileName).scaled(QSize)),fileName)填充它。 3) 使用QListView显示模型中的数据 但也存在一些问题。 首先,例如model.columnCount为52,但屏幕上只显示一张图片,没有其名称 有人能帮我吗 1) 如何正确填充模型?我的做法:带Qt的img查看器,qt,qstandarditemmodel,Qt,Qstandarditemmodel,我正在尝试创建一个基于模型/视图概念的应用程序。 我需要打开一些目录,找到其中的所有IMG,并在MainWindow(QMainWindow的子类)中显示它们。 架构是这样的: 1) 通过QDir创建“良好”文件名的QStringList(使用扩展名筛选文件名)。 2) 创建QStandardItemModel并用QStandardItem(QIcon(QImage(fileName).scaled(QSize)),fileName)填充它。 3) 使用QListView显示模型中的数据 但也存
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);
由于您确定需要
appendColumn
,最后一位将是使用Qt::DecorationRole
添加QIcon作为数据。下面的内容适用于我在运行程序的同一文件夹中查看图像(尽管我不知道为什么它显示为网格布局)
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QStandardItemModel*itemModel=新QStandardItemModel();
QListView*listView=新的QListView();
QDir指令(“.”);
QStringList imgs=dirs.entryList(QStringList()show();
a、 exec();
}
您有错误itemModel->appendRows(listItem);
相反itemModel->appendRow(listItem);
C2039:“appendRows”:不是“QStandardItemModel”的成员请参见“QStandardItemModel”的声明抱歉,这是我的错误…appendColumn(listItem)查看所有文件名。但问题仍然是显示IMG,而不是千个名称。也许QLabel会有用。有人能帮我怎么做吗?
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);
#include <QApplication>
#include <QStandardItemModel>
#include <QListView>
#include <QDir>
#include <QStringList>
#include <QList>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QStandardItemModel* itemModel = new QStandardItemModel();
QListView* listView = new QListView();
QDir dirs(".");
QStringList imgs = dirs.entryList(QStringList() << "*.jpg" << "*.jpeg" << "*.bmp" << "*.png");
QList<QStandardItem *> listItem;
for(int i = 0; i < imgs.count(); ++i){
QImage image = QImage(dirs.absoluteFilePath(imgs.at(i))).scaled(QSize(80, 60));
QStandardItem *item = new QStandardItem();
item->setData(QVariant(QPixmap::fromImage(image)), Qt::DecorationRole);
listItem << item;
}
itemModel->appendColumn(listItem);
listView->setModel(itemModel);
listView->setViewMode(QListView::IconMode);
listView->show();
a.exec();
}