
Originally Posted by
jho
I have three listWidgets where I need to add these three arrays.
It would be much better to have three listViews each serving a separate column from a single model based on QFileInfoList.
Something along the lines of:
#include <QtWidgets>
public:
int rowCount
(const QModelIndex &parent
= QModelIndex()) const { return parent.
isValid() ?
0 : m_data.
size();
} if(!hasIndex
(index.
row(), index.
column(), index.
parent())) return QVariant();
if(role
!= Qt
::DisplayRole) return QVariant();
const QFileInfo &finfo
= m_data.
at(index.
row());
switch(index.column()) {
case 0: return finfo.fileName();
case 1: return finfo.lastModified().toString("dd/MM/yyyy hh:mm:ss");
case 2: return finfo.size();
}
}
private:
QFileInfoList m_data;
};
int main(int argc, char **argv) {
QFileInfoList list
= QDir(argv
[1]).
entryInfoList(QDir::Files|QDir
::NoDotAndDotDot);
InfoListModel model(list);
l1.setModel(&model);
l2.setModel(&model);
l3.setModel(&model);
l1.setModelColumn(0);
l2.setModelColumn(1);
l3.setModelColumn(2);
l1.show();
l2.show();
l3.show();
return app.exec();
}
#include <QtWidgets>
class InfoListModel : public QAbstractTableModel {
public:
InfoListModel(const QFileInfoList &list, QObject *parent = 0) : QAbstractTableModel(parent), m_data(list) {}
int rowCount(const QModelIndex &parent = QModelIndex()) const { return parent.isValid() ? 0 : m_data.size(); }
int columnCount(const QModelIndex &parent = QModelIndex()) const { return 3; }
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const {
if(!hasIndex(index.row(), index.column(), index.parent())) return QVariant();
if(role != Qt::DisplayRole) return QVariant();
const QFileInfo &finfo = m_data.at(index.row());
switch(index.column()) {
case 0: return finfo.fileName();
case 1: return finfo.lastModified().toString("dd/MM/yyyy hh:mm:ss");
case 2: return finfo.size();
default: return QVariant();
}
}
private:
QFileInfoList m_data;
};
int main(int argc, char **argv) {
QApplication app(argc, argv);
QFileInfoList list = QDir(argv[1]).entryInfoList(QDir::Files|QDir::NoDotAndDotDot);
InfoListModel model(list);
QListView l1;
QListView l2;
QListView l3;
l1.setModel(&model);
l2.setModel(&model);
l3.setModel(&model);
l1.setModelColumn(0);
l2.setModelColumn(1);
l3.setModelColumn(2);
l1.show();
l2.show();
l3.show();
return app.exec();
}
To copy to clipboard, switch view to plain text mode
And there is also QFileSystemModel.
Bookmarks