Bonjour,
Cela fait deux jours que je cherche en vain une solution à mon problème. Je voudrais créer un tableau pour modifier ma base de données. J'ai essayé avec un QTableView et un QTableWidget mais ces deux classes ne permettent pas de faire exactement ce que je veux faire.
Je vous montre ce que je souhaite faire via une image créée à partir de paint (désolé pour la qualité, mais j'espère que ce petit dessin est assez explicite). En fait, je voudrais pouvoir modifier le nom d'une catégorie et sa catégorie mère (qui peut être "null"). La deuxième colonne contient un menu déroulant qui contient toutes les catégories. De plus, on peut sélectionner plusieurs catégories via les cases à cocher et les supprimer en cliquer sur le bouton "supprimer". Je voudrais qu'il y ait une case à cocher en titre de colonne qui permette de cocher toutes les catégories. Enfin, on enregistre les modifications en appuyant sur le bouton "OK". La deuxième image est la table que je veux modifier. J'espère que vous avez compris
Je souhaite vous expliquer ce que j'ai commencé à faire avec QTableView.
J'arrive donc à modifier et à supprimer des colonnes. Mais je ne peux pas supprimer plusieurs catégories d'un seul coup. De plus, mon deuxième problème est beaucoup plus grave ! Mon QTableView ne m'affiche pas les catégories qui n'ont pas de catégories mère (parent_categorie_produit = null) à cause de la méthode QTableView::setRelation() ...
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
24 void editerCategorieProduit::afficher(){ //model est un attribut de la classe editerCategorieProduit model = new QSqlRelationalTableModel(this); model->setTable("categorie_produit"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); model->setRelation(2, QSqlRelation("categorie_produit", "id_categorie_produit", "nom_categorie_produit")); model->setHeaderData(1, Qt::Horizontal, tr("Nom")); model->setHeaderData(2, Qt::Horizontal, tr("Parent")); model->select(); ui->tableCategorie->setModel(model); ui->tableCategorie->setItemDelegate(new QSqlRelationalDelegate(this)); ui->tableCategorie->setColumnHidden(0, true); ui->tableCategorie->setSelectionBehavior(QAbstractItemView::SelectRows); model->database().transaction(); if (model->submitAll()) model->database().commit(); else model->database().rollback(); ui->tableCategorie->setModel(model); ui->tableCategorie->hideColumn(0); }
J'ai essayé de faire quelque chose de similaire avec un QTableWidget mais la méthode QTableWidget::setModel() est privée ...
J'ai aussi pensé à faire un "tableau à la main" avec des layoutHorizontal et des layoutVertical. Et ensuite, je supprime toutes lignes dans ma base pour ensuite insérer toutes les lignes du tableau (donc les lignes non modifiées et modifiées). Mais je pense que cette méthode est trop lourde et j'espère qu'il y ait une solution plus simple !!!
J'espère que vous avez compris mon problème ! Si c'est le cas, avez-vous une idée comment faire ?
En espérant avoir une réponse, je vous remercie d'avance
PS : je débute sur Qt, je m'excuse d'avance si je pose des questions simples![]()
Partager