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

Qt Discussion :

[MVC] QSqlRelationalTableModel - Personnalisation de l'affichage des données contenues dans le modèle


Sujet :

Qt

  1. #1
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Juin 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2014
    Messages : 96
    Points : 344
    Points
    344
    Par défaut [MVC] QSqlRelationalTableModel - Personnalisation de l'affichage des données contenues dans le modèle
    Bonjour,

    j'utilise les MVC pour la première fois et je crois bien que j'ai besoin de votre aide :-\.

    J'utilise une QSqlRelationTableView.
    J'ai créé un délégué pour modifier la façon dont sont éditées certaines données.

    Je souhaiterais maintenant modifier la façon dont sont affichées certaines données.
    Si j'ai bien compris ce que j'ai lu sur les MVC, contrairement à ce que je pensais au début, pour faire ça, il ne faut pas que je modifie la vue mais le modèle.
    Dans les exemples que j'ai vu, la fonction data() est ré-implémentée et les coordonnées de l'index (ligne/colonne) combinées au flag Qt:isplayRole permettent de personnaliser l'affichage d'une case, d'une ligne ou d'une colonne.

    En supposant que ce que je viens d'expliquer au dessus est correct, il y a un point sur lequel je bloque. Tous les exemples que j'ai vu alimentent le modèle en données à l'aide d'une variable dont le contenu a été défini par le programmeur pour illustrer l'exemple. Ici, c'est la variable mElements qui a été définie spécialement pour l'occasion :
    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
    QVariant TableModel::data(const QModelIndex &index, int role) const
    {
        if (!index.isValid() || index.row() < 0 || index.row() >= mElements.count())
        {
            return QVariant();
        }
     
        switch (role)
        {
        case Qt::DisplayRole:
        case Qt::EditRole:
            if (index.column() == Element)
            {
                return mElements[index.row()].first;
            }
            else if (index.column() == Value)
            {
                return mElements[index.row()].second;
            }
            break;
        }
     
        return QVariant();
    }
    Mais dans mon cas, le modèle est peuplé automatiquement lors de l'appel à select().
    Comment fais-je donc pour indiquer à data() quelle valeur elle doit retourner ? A quoi dois-je faire référence ?


    Merci d'avance pour vos réponses en espérant que j'ai à peu prés saisi le concept des MVC...

  2. #2
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Juin 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2014
    Messages : 96
    Points : 344
    Points
    344
    Par défaut
    Bon, il semblerait qu'en fait j'ai bien compris comment fonctionnent les MVC.

    J'ai redéfini la fonction select() pour effectuer moi-même la requête SQL et stocker le contenu de ma table dans un QList<QSqlRecord>. J'utilise ensuite cette liste dans les fonctions data, flags, rowCount...

  3. #3
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Juin 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2014
    Messages : 96
    Points : 344
    Points
    344
    Par défaut
    Ok, donc vu que j'ai fait n'importe quoi en ré-implémentant mes fonctions et que ce que j'ai expliqué dans le message précédent est faux, voilà une piste pour les suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int EditDataBaseModel::rowCount(const QModelIndex &parent) const
    {
        this->query().last();
        return this->query().at();
    }
     
    int EditDataBaseModel::columnCount(const QModelIndex &parent) const
    {
        return this->query().record().count();
    }
    (fonction ré-implémentées dans ma classe modèle personnalisée. Le peuplement du modèle se fait automatiquement à l'appel de Select)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/04/2015, 10h12
  2. [EMF] Sortie XML des données contenues dans un modèle EMF
    Par bpy1401 dans le forum Eclipse Modeling
    Réponses: 0
    Dernier message: 12/04/2013, 08h48
  3. [ZF 1.6] Affichage des données récupérées dans un tableau
    Par MaT$oN dans le forum Zend_Db
    Réponses: 4
    Dernier message: 10/03/2009, 09h32
  4. [MySQL] Probleme d'affichage des infos contenues dans la base de données
    Par DonKnacki dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/11/2006, 16h19
  5. Réponses: 2
    Dernier message: 20/02/2004, 08h47

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