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 :

QHeaderView : prise en compte des conditions de tri précédentes

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 99
    Points : 58
    Points
    58
    Par défaut QHeaderView : prise en compte des conditions de tri précédentes
    Bonjour,

    Je souhaiterais que l'utilisateur de mon application puisse bénéficier d'un tri "avancé" sur un tableau.

    Lors d'un clic sur une colonne, la nouvelle condition de tri doit alors prendre en compte la colonne courante mais aussi les colonnes sélectionnées précédemment.

    L'idée serait alors de réimplémenter la méthode lessThan() d'un QSortFilterProxyModel.

    Mais, pour aller au bout des choses, il faudrait également que les différentes colonnes considérées pour le tri laissent voir apparaître une "flèche" (image ci-dessous) pour l'ordre de tri.

    Nom : tableau_tri.png
Affichages : 95
Taille : 1,4 Ko

    Or, QHeaderView ne semble pas gérer plus d'un indicateur actif d'après les sources Qt.
    Il faudrait alors réimplémenter paintSection() de QHeaderView mais aussi tout une partie de la logique de cet objet là qui tourne autour d'un seul indicateur de tri actif à la fois.

    Auriez-vous des conseils à m'apporter pour mettre au point cette fonctionnalité ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Le gros problème, c'est que l'un dans l'autre, tu risques bien plus de surprendre l'utilisateur qu'autre chose si tu commence à faire apparaître plusieurs fleches dans les headers de tes colonnes.

    Car, lorsque tu décide de faire un tri sur plusieurs critères, l'ordre des critères va déterminer l'ordre précis des éléments Je m'explique: Mettons que l'on ait une classe composée de cinq membres. Nous pouvons décider d'utiliser chacun de ces membres pour le tri. Mais nous pouvons également utiliser deux, trois, quatre même les cinq membres pour effectuer le tri.

    Et là, l'ordre dans lequel on retrouvera les différents élément en triant sur membre1 puis sur membre2 et enfin sur membre3 peut parfaitement être différent de celui que l'on obtiendrait en triant sur membre1 puis sur membre3 et enfin sur membre2 et cet ordre pourrait être totalement différent de celui obtenu en triant sur membre2 puis sur membre1 et enfin sur membre3, et ainsi de suite (en gros, pour N critères de tri, tu as 2N ordres possibles )

    A mon sens, tu aurais donc avantage à prévoir "un autre moyen" de faire apparaitre les critères utilisés dans l'ordre dans lequel ils ont été utilisé... Cela surprendrait beaucoup moins l'utilisateur que de voir plusieurs flêches vers le haut ou vers le bas et de se rendre compte que, pour l'une ou l'autre des colonnes, le tri ne correspond pas à l'idée qu'il a pu s'en faire

    N'oublie pas que, pour obtenir un tri "correct" avec seulement deux critères, l'opérateur < prend déjà une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool operator< (MonType const & first, MonType const & second){
        return (first.critère1 < second.critètre1) ||
               (fist.critère1 == second.critère1 && first.critère2 <second.critère2);
    }
    Plus tu ajoutera des critères, plus la logique deviendra longue pour prendre tous les critères en compte
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Prise en compte des virgules aléatoire selon le type de curseur ?
    Par mosquitout dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 25/07/2006, 19h48
  2. [Date dans Mysql] Prise en compte des espaces
    Par tchoukapi dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 02/01/2006, 03h41
  3. [MS-DOS] Prise en compte des accents
    Par Furius dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 15/11/2005, 13h30
  4. Prise en compte des réponses des posteurs
    Par hunter dans le forum Evolutions du club
    Réponses: 152
    Dernier message: 05/11/2005, 22h40
  5. Prise en compte des contraintes
    Par potanie dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 05/11/2004, 10h00

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