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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; };
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 :
Et voici ma window principale ou se charge la liste et ou je set le model
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
Ma question est donc, que dois-je faire pour que je puisse totalement personnalisee les elements de ma liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }
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.
Partager