QListView et modèle personnalisé
Bonjour a tous et a toutes.
J'ai pour but de creer une listview de strings. J'ai donc cree une classe
StringListModel heritant de QAbstractListModel comme ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
class StringListModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit StringListModel(QObject *parent = 0);
int rowCount(const QModelIndex&) const;
QVariant data(QModelIndex const &, int) const;
Qt::ItemFlags flags(QModelIndex const &) const;
private:
QStringList string_list;
}; |
Tout marche tres bien, lorsque je cree ma liste dans ma mainwindow, la liste est bien chargee, et les elements sont bien presents dans ma listview.
Mais j'aimerai y ajouter des effets de styles. Comme par exemple, garder un contour sur la selection, ou alors mettre en rouge juste la ligne selectionnee.
aucun moyen d'y parvenir.
Voici le .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
|
StringListModel::StringListModel(QObject *parent) : QAbstractListModel(parent)
{
this->string_list.push_back("test");
this->string_list.push_back("test2");
}
int StringListModel::rowCount(const QModelIndex& index) const
{
return (this->string_list.size());
}
QVariant StringListModel::data(QModelIndex const &index, int role) const
{
if (Qt::DisplayRole == role)
return (QVariant(this->string_list[index.row()]));
return (QVariant());
}
Qt::ItemFlags StringListModel::flags(QModelIndex const &) const
{
return (Qt::NoItemFlags);
} |
Et voici ma window principale ou se charge la liste et ou je set le model
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
Window::Window(QWidget *parent) : QWidget(parent)
{
this->setFixedSize(400, 550);
this->vue_ = new QListView(this);
this->vue_->setGeometry(10, 10, 355, 325);
this->model_ = new StringListModel(this);
this->vue_->setModel(this->model_);
this->vue_->show();
} |
Ma question est donc, que dois-je faire pour que je puisse totalement personnalisee les elements de ma liste
par exemple :
- mettre en noir toutes les strings de la listes.
- mettre en rouge la string qui est selectionnee par l'utilisateur
- ou alors rajouter une belle bordure sur la string selectionnee.
Merci d'avances pour vos reponses.