モデル/ビューの概念に基づいてアプリケーションを作成しようとしています。いくつかのディレクトリを開き、その中のすべての imgs を見つけて、それらを MainWindow (QMainWindow のサブクラス) に表示する必要があります。アーキテクチャは次のようなものです: 1) QDir を介して、「適切な」ファイル名の QStringList を作成します (拡張子によるファイル名フィルターを使用)。2) QStandardItemModel を作成し、QStandardItem (QIcon(QImage(fileName).scaled(QSize)), fileName) で埋めます。3) QListView を使用して、モデルからのデータを表示します。
しかし、いくつかの問題があります。まず最初に - theModel.columnCount はたとえば 52 ですが、画面には 1 つの画像しか表示されず、その名前は表示されません。
誰かが私を助けることができますか: 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 クラスの 1 つのスロットにあります。
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);