IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Compréhension de QAbstractItemModel et compagnie

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Responsable technique Audiovisuel
    Inscrit en
    Mars 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique Audiovisuel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2019
    Messages : 2
    Par défaut Compréhension de QAbstractItemModel et compagnie
    Bonjour à tous,

    Voila, j'ai une question plus théorique qu'autre chose. Je m'explique : je développe un logiciel de ticketing pour la gestion des contrats de maintenance et forcément la gestion de tickets incidents chez des clients. J'ai choisi le Framework Qt car il faut que cette application puisse fonctionner sur OS Mac et Windows. Tout la partie gestion client/site/salle et équipements assignés aux salles et aux contrats est faite (base de données et programme Qt sur les deux OS). Il me reste à faire la partie "ticketing", et pour cela je doit faire plus de manipulations dans les QtableView/QAbstractItemModel afin de faire remonter les informations importantes sans que l'utilisateur soit obligé de se farcir toute la liste de ticket pour voir les importants.

    Donc pour faire cela, j'ai essayé d'approfondir le système modèl/vue de Qt. Je l'ai utilisé pour la première partie sans problème pour les sélections, récupérations de données et cacher des colonnes de la base de donnée qui n'ont pas à être vue par l'utilisateur par exemple. Et là, je suis tombé sur une question sans réponse :

    Pour faire un classement tout bête par ordre alphabétique a partir d'une colonne donnée, si je me report à la doc Qt, je doit faire un code de ce style :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #include "mainwindow.h"
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent)
     
    {
       resize(1000,800);
     
       table = new QTableView(this);
       table->move(50, 50);
       table->setFixedSize(900, 200);
     
       QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
       db.setHostName("LocalHost");
       db.setUserName("root");
       db.setPassword("MdP");
       db.setDatabaseName("nomBase");
       db.open();
     
       QSqlQueryModel *modal = new QSqlQueryModel();
       QSqlQuery *qry = new QSqlQuery(db);
       qry->prepare("SELECT * FROM listclient ");
       qry->exec();
       modal->setQuery(*qry);
     
       table->setModel(modal);
     
       table->sortByColumn(1);
       table->setSortingEnabled(true);
     
     
    }
    Ça ne donne pas d'erreur à la compilation, mais pas de classement par ordre alphabétique en résultat!
    j'ai parcouru les forums, et j'ai beaucoup lu qu'il fallait passer par un QAbstractItemModel pour des fonctions plus poussées... retour à la doc Qt et en la suivant je vois qu'il faut faire un truc de ce style :
    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
     
    ..../
       db.open();
     
       QSqlQueryModel *modal = new QSqlQueryModel();
       QSqlQuery *qry = new QSqlQuery(db);
       qry->prepare("SELECT * FROM listclient ");
       qry->exec();
       modal->setQuery(*qry);
     
       table->setModel(modal);
     
       QAbstractItemModel *itemModel;
       itemModel = table->model();
     
       itemModel->sort(1);
    }
    Même résultat...(même si j'utilise une deuxième QtableView à assigner à itemModel)
    Sur une autre discussion d'un forum d'un autre problème, ils disaient à la fin d'aller voir du coté de QSortFilterProxyModel.... vue le nom, je me suis intéressé à coco...
    et j'ai donc fait ça :
    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
     
    ..../
       db.open();
     
       QSqlQueryModel *modal = new QSqlQueryModel();
       QSqlQuery *qry = new QSqlQuery(db);
       qry->prepare("SELECT * FROM listclient ");
       qry->exec();
       modal->setQuery(*qry);
     
       QSortFilterProxyModel *proxiModel = new QSortFilterProxyModel(modal) ;
       proxiModel->setSourceModel(modal);
     
       proxiModel->sort(1);
     
       table->setModel(proxiModel);
     
    }
    Et là.... ça marche.
    et pire, si je fait ça :
    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
     
    ..../
       db.open();
     
       QSqlQueryModel *modal = new QSqlQueryModel();
       QSqlQuery *qry = new QSqlQuery(db);
       qry->prepare("SELECT * FROM listclient ");
       qry->exec();
       modal->setQuery(*qry);
     
       QSortFilterProxyModel *proxiModel = new QSortFilterProxyModel(modal) ;
       proxiModel->setSourceModel(modal);
     
       table->setModel(proxiModel);
     
       QAbstractItemModel *itemModel;
       itemModel = table->model();
     
       itemModel->sort(1);
     
    }
    Ça marche aussi ... J'ai également le classement qui s'opère......Mais c'est pas logique, c'est QSortFilterProxyModel qui hérite de QAbstractItemModel via QAbstractProxyModel, et pas l'inverse ???

    Donc, voila, je pense que j'ai loupé un truc....

    Questions :
    Pourquoi les deux premiers codes n'ont pas agit ?
    Pourquoi le dernier code fonctionne ?
    Y a t-il un moyen de voir tous les héritiers d'une classe sans devoir se les faire un par un ? (ça coûte rien de demander lol)

    Je suis preneur de toute suggestion ou information.

    Merci pour le temps passé

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Responsable technique Audiovisuel
    Inscrit en
    Mars 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique Audiovisuel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2019
    Messages : 2
    Par défaut
    Bonjour,

    J'ai l'impression que ma question n'inspire pas beaucoup de monde...elle doit être trop stupide pour dénier une réponse... .... où alors, les génies de la programmation sont en vacance... loll

    @+

Discussions similaires

  1. Compréhension de fseek
    Par Argonz dans le forum C
    Réponses: 9
    Dernier message: 12/01/2004, 15h01
  2. compréhension du profil d'une fonction
    Par lor dans le forum MFC
    Réponses: 7
    Dernier message: 08/01/2004, 12h59
  3. [FLASH MX] Prob de compréhension des bouttons
    Par WriteLN dans le forum Flash
    Réponses: 13
    Dernier message: 16/10/2003, 17h01
  4. onclipevent (problème de compréhension)
    Par stephane eyskens dans le forum Flash
    Réponses: 8
    Dernier message: 24/09/2003, 15h09
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo