QAbstractItemModel et QListView
Bonjour,
Je suis entrain de réaliser une application chargée de récuperer un des données dans un ou plusieurs fichiers XML, permet de mapper ces noms à des noms plus conformes, afin que ceux ci génère un script sql pour alimenter les tables d'une base de données.
Pour le moment j'arrive à parser mes fichierx XML.
J'aimerai à présent pouvoir remplir un modele pour pouvoir ensuite le lier à une vue QListView.
Voici l'architechture de mon application:
obets metier:
Machine, Application
Modeles:
MachineModel, ApplicationModel
Code de ApplicationModel.h:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class ApplicationModel : public QAbstractItemModel
{
Q_OBJECT
private:
QList<Application> applist_;
public:
inline ApplicationModel() : QAbstractItemModel() {};
virtual ~ApplicationModel();
inline virtual int columnCount( const QModelIndex & parent = QModelIndex() ) const { return 3; };
virtual QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const;
virtual QModelIndex index ( int row, int column, const QModelIndex & parent = QModelIndex() ) const;
inline virtual int rowCount( const QModelIndex & parent = QModelIndex() ) const { return applist_.size(); };
virtual QModelIndex parent(const QModelIndex &child) const;
void append(Application application);
bool contains(Application application);
}; |
Code de ApplicationModel.cpp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include "ApplicationModel.h"
QVariant ApplicationModel::data( const QModelIndex & index, int role) const
{
switch (index.column())
{
case 0:
return applist_.at(index.row()).getNom() + " " + applist_.at(index.row()).getVersion();
case 1:
return applist_.at(index.row()).getNom();
case 2:
return applist_.at(index.row()).getVersion();
default:
return QVariant();
}
}
QModelIndex ApplicationModel::index ( int row, int column, const QModelIndex & parent) const
{
return createIndex(row, column);
}
QModelIndex ApplicationModel::parent(const QModelIndex &child) const
{
return createIndex(0, 0);
}
ApplicationModel::~ApplicationModel()
{}
void ApplicationModel::append(Application application)
{
int row = rowCount();
beginInsertRows(QModelIndex(), row, row);
applist_.append(application);
endInsertRows();
}
bool ApplicationModel::contains(Application application)
{
return applist_.contains(application);
} |
Je n'ai pas encore implémenté toutes les fonctions de QAbstraceModelView.
Lorsque je lie ce ApplicationModel à la QListView, celle-ci ne se remplir pas, et j'avoue ne pas saisir pourquoi, malgrès mes lectures et relectures de la documentation de Qt, est-ce que qu'elqu'un peut m'aider? je me sens un peu perdu.
En suite j'aurai une question en ce qui concerne les QVariant que retourne la methode data(): Est-ce que un QVariant peut contenir mes objets Metier (cela me simplifierait grandement la tâche)?
Enfin, Ai-je bien fait d'architechturer mon application de cette manière y'a-t'il un meilleur moyen que de définir des objets metier?