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 :

Rafraîchir un QTableView


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut Rafraîchir un QTableView
    Bonjour,
    je me retrouve face a un probleme et je pense qu il existe une solution.
    J ai un QTableView contenant un model. Lorsque je clique dans une cellule de se tableau je voudrai qu en fonction de celle-ci, d autre cellules se collorie.
    J ai donc ecrit ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (cd1 && cd2 && cd3 && this->_modelDate->item(sel.row(), idM)->background() == QBrush(QBrush(QColor(18, 195, 76)) )) // color JC si AM + M sel avec AM qui vient d etre clique
            {
               this->_modelDate->item(sel.row(), idJC)->setBackground(QBrush(QColor(18, 195, 76))); // JC
               this->_modelDate->item(sel.row(), idM)->setBackground(QBrush(QColor(216, 78, 78))); // M
            }
    le probleme est que sur le tableau rien ne se passe tant que je ne clique pas sur soit une combo box qui se trouve dans la meme frame, soit que je descende la scrollbar. Si j effectue une de ces actions, les cellules se colorie.
    Quelqu un sait il comment les colorer en instantane?
    Meme probleme si je met des setText a la place
    Petite precision, ces lignes de code se trouve dans un slot
    appel quand on clique sur une cellule (on recupere l element sel )
    Merci de votre aide

  2. #2
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Peux-tu nous donner le nom du SLOT que tu utilise ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    c'est un slot perso void CL::selectionPeriode(QModelIndex sel)
    le signal est un clique sur le tab
    connect(ui._2tableDate, SIGNAL(clicked(QModelIndex)), this, SLOT(selectionPeriode(QModelIndex)));

  4. #4
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Citation Envoyé par toams69 Voir le message
    c'est un slot perso void CL::selectionPeriode(QModelIndex sel)
    le signal est un clique sur le tab
    connect(ui._2tableDate, SIGNAL(clicked(QModelIndex)), this, SLOT(selectionPeriode(QModelIndex)));
    ui._2tableDate est un QTableView ou un QTableWidget ?

    A priori ce serait un problème de rafraichissement des éléments graphiques étant donner que si tu cliques sur l'ascenseur ou un autre élément cela fonctionne.

    Pourrais-tu nous donner plus de code car là ce n'est pas évident.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    il s'agit d'un QTableView

    Voici une partie du .h pour aider (le reste n a rien a voir avec le tableau donc je prefere limite les lignes inutiles )

    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 CL : public QFrame
    {
        Q_OBJECT
     
        public:
            CL(QWidget *parent = 0);
     
        private:
           QTableView *_2tableDate;
            QStandardItemModel          *_modelDate;
     
        private slots:
           void        selectionPeriode(QModelIndex);
     
    };
    voici le connect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(this->_2tableDate, SIGNAL(clicked(QModelIndex)), this, SLOT(selectionPeriode(QModelIndex)));
    et voici le slot en question

    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
     
     
    void        CL::selectionPeriode(QModelIndex sel)
    {  
            if (cd1 && cd2 && cd3 && this->_modelDate->item(sel.row(), idM)->background() == QBrush(QBrush(QColor(18, 195, 76)) )) 
            {
               // si je suis ici, les modifications n apparaissent que apres avoir dessendu le scroll ou alors en cliquant sur une comboBox appartenant a la frame qui n est pas du tout connecte.
               this->_modelDate->item(sel.row(), idJC)->setBackground(QBrush(QColor(18, 195, 76))); 
               this->_modelDate->item(sel.row(), idM)->setBackground(QBrush(QColor(216, 78, 78))); 
            }
            else
              // si je suis la la modification apparait en instantanee
                this->_modelDate->item(sel.row(), sel.column())->setBackground(QBrush(QColor(18, 195, 76)));
        }
        else
          // pareil
            this->_modelDate->item(sel.row(), sel.column())->setBackground(QBrush(QColor(216, 78, 78)));
     
        // DESELECTIONNE
        QItemSelectionModel *selection = ui._2tableDate->selectionModel();
        selection->select( sel, QItemSelectionModel::Toggle );
    }
    voila j'espere que vous pourrez m aidez.
    je pense egalement qu il s agit d un rafraichissement.
    Je n ai pas mis la partie ou je remplis mon model si tu a besoin de plus pour m aider je peu t envoyer le .cpp et .h.
    Merci beaucoup

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    J ai trouve
    il suffit d appeler la methode reset du tableView
    Ouf ca marche

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

Discussions similaires

  1. Rafraîchir une page php
    Par WiLL_59 dans le forum Langage
    Réponses: 5
    Dernier message: 20/02/2006, 18h16
  2. Réponses: 4
    Dernier message: 31/10/2005, 16h32
  3. Rafraîchir automatiquement une page
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 17/10/2005, 18h29
  4. Réponses: 22
    Dernier message: 19/09/2005, 14h49
  5. Réponses: 3
    Dernier message: 29/12/2003, 13h47

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