Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. French
  4. Couleur avec QIdentityProxyModel

Couleur avec QIdentityProxyModel

Scheduled Pinned Locked Moved Unsolved French
pistache
13 Posts 4 Posters 2.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    lacombe
    wrote on last edited by
    #1

    Bonjour,

    Voici le code pour appliquer une couleur à une cellule, mais ne marche pas. pouvez vous me le corriger ?

    Merci d'avance.

    
    class monModele : public QIdentityProxyModel
    {
     
    public:
     
        monModele(QObject* parent = 0): QIdentityProxyModel(parent)
             
     
        QVariant data(const QModelIndex &index, int role)
           {
           if (role == Qt::BackgroundRole) {
               QColor color = Qt::blue;
                     return QBrush(color);
            }
           return QIdentityProxyModel::data(index, role);
     
           }
    
    
    
    
    ..........
    sqlModele=newQSqlTableModel();
    sqlModele->setQuery(*mRequete);
    monModele*identModel=newmonModele();
    identModel->setSourceModel(sqlModele);
                  identModel->data(
    identModel->index(2,1),
    Qt::BackgroundRole);
    ui->tableView->setModel(identModel);
    ui->tableView->show();
    
    jsulmJ 1 Reply Last reply
    0
    • L lacombe

      Bonjour,

      Voici le code pour appliquer une couleur à une cellule, mais ne marche pas. pouvez vous me le corriger ?

      Merci d'avance.

      
      class monModele : public QIdentityProxyModel
      {
       
      public:
       
          monModele(QObject* parent = 0): QIdentityProxyModel(parent)
               
       
          QVariant data(const QModelIndex &index, int role)
             {
             if (role == Qt::BackgroundRole) {
                 QColor color = Qt::blue;
                       return QBrush(color);
              }
             return QIdentityProxyModel::data(index, role);
       
             }
      
      
      
      
      ..........
      sqlModele=newQSqlTableModel();
      sqlModele->setQuery(*mRequete);
      monModele*identModel=newmonModele();
      identModel->setSourceModel(sqlModele);
                    identModel->data(
      identModel->index(2,1),
      Qt::BackgroundRole);
      ui->tableView->setModel(identModel);
      ui->tableView->show();
      
      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @lacombe It is better to ask questions using French in this forum: https://forum.qt.io/category/57/french
      This forum is English.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #3

        Bonjour,

        Comme déjà dit sur l'autre question, il faut rajouter une condition dans le if (role == Qt::BackgroundRole) { qui vérifie la ligne et la colonne d'index et ne retourne la couleur que pour les bonnes valeurs.

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • L Offline
          L Offline
          lacombe
          wrote on last edited by
          #4

          Merci de votre réponse, j'ai essayé d'apporter les correction, mais le message d'erreur à la compilation au niveau du if...
          Merc i de votre aide.

          class monModele : public QIdentityProxyModel
          {

          public:

          monModele(QObject* parent = 0): QIdentityProxyModel(parent)
              { qDebug() << "constructor"; }
          
          QVariant data(const QModelIndex &index, int role) const override
             {
               if (role == Qt::ForegroundRole) && (index == index.row()) && (index == index.column()) {
          
               return QVariant(QBrush (QColor(Qt::blue)));
          
              }
          
          
            return QIdentityProxyModel::data(index, role);
          
          
            }
          
          1 Reply Last reply
          0
          • VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by
            #5

            Est ce que tu voudrais appliquer une couleur à une cellule avec une coordonner fixe?

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            1 Reply Last reply
            0
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on last edited by VRonin
              #6

              @lacombe said in Couleur avec QIdentityProxyModel:

              if (role == Qt::ForegroundRole) && (index == index.row()) && (index == index.column()) {

              Vue que la cellule souhaitée est la 2, 1:

              if (role == Qt::ForegroundRole
                  && index.row() == 2
                  && index.column() == 1) {
              

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              0
              • L Offline
                L Offline
                lacombe
                wrote on last edited by
                #7

                Merci de votre réponse, à présent je comprends mieux ce fonctionnement.
                Il reste cependant un petit problème: Quelle que soit la valeur de index dans identModel->data(
                identModel->index(10,1),
                Qt::ForegroundRole);
                Ici par exemple en (10,1) la coloration est toujours en (6,1) comme dans le code suivant:

                Merci d'avance.

                [ monModele(QObject* parent = 0): QIdentityProxyModel(parent)
                { qDebug() << "constructor"; }

                QVariant data(const QModelIndex &index, int role) const override
                {

                int row = index.row();
                int col = index.column();

                if (role == Qt::ForegroundRole)
                {

                if (row == 6 && col == 1)
                {
                QColor color(Qt::blue);
                return QVariant (color);
                }
                return QVariant();

                }

                if (role == Qt::ForegroundRole)
                {
                if (row == 8 && col == 1)
                {
                QColor color(Qt::red);
                return QVariant(color);
                }

                return QVariant();
                }

                return QIdentityProxyModel::data(index, role);]

                ...........

                [sqlModele->setQuery(*mRequete);

                monModele *identModel = new monModele();
                identModel->setSourceModel(sqlModele);

                identModel->data(
                identModel->index(10,1),
                Qt::ForegroundRole);

                ui->tableView->setModel(identModel);

                ui->tableView->show();]

                1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on last edited by
                  #8

                  Simplifions un peu les choses:

                  QVariant data(const QModelIndex &index, int role) const override
                  {
                      if (role == Qt::ForegroundRole) {
                          if (row == 6 && col == 1) {
                              return QColor(Qt::blue);
                          } else if (row == 8 && col == 1) {
                              return QColor(Qt::red);
                          }
                      }
                      return QIdentityProxyModel::data(index, role);
                  }
                  

                  Cela rend le code plus claire et plus lisible.

                  Ensuite:

                  identModel->data(
                  identModel->index(10,1),
                  Qt::ForegroundRole);

                  Ceci ne sert strictement à rien ou alors il manque qDebug() << devant pour voire ce que retourne la méthode.

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  1 Reply Last reply
                  2
                  • L Offline
                    L Offline
                    lacombe
                    wrote on last edited by
                    #9

                    Merci, Ceci est plus clair.
                    Autre chose: comment peut on paramétrer une variable à la place de 6 dans par exemple if(row==6) ?

                    Merci une fois de plus de votre aide.

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #10

                      Quel est le but de cette variable ? De pouvoir paramétrer quelle cellule change de couleurs ?

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0
                      • L Offline
                        L Offline
                        lacombe
                        wrote on last edited by
                        #11

                        Merci pour votre éclairage,

                        Simplement ce que voulais savoir, comment fait on quand on est hors de la classe: class monModele : public QIdentityProxyModel, par exemple dans le main, pour indiquer le numéro de cellule ou de ligne.

                        Merci d'avance;

                        1 Reply Last reply
                        0
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #12

                          Il vous faut rajouter une méthode permettant de configurer ça.
                          Code permettant de faire ça avec plusieurs cellule (attention uniquement de tête donc ni compilé, ni testé):

                          void setBackgroundColor(int row, int column, const QColor& color) {
                              QPair<int, int> cell = qMakePair(row, column)
                              _cellColorMap[cell] = color;
                          }
                          

                          _cellColorMap étant QMap<QPair<int,int>, QColor>

                          Comme cela dans data:

                          QVariant data(const QModelIndex &index, int role) const override
                          {
                              if (role == Qt::ForegroundRole) {
                                  QPair<int, int> cell = qMakePair(index.row, index.column);
                                  auto iterator = _cellColorMap.find(cell);
                                  if (iterator != _cellColorMap.end()) {
                                      return *iterator;
                                  }
                              }
                              return QIdentityProxyModel::data(index, role);
                          }
                          

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          0
                          • L Offline
                            L Offline
                            lacombe
                            wrote on last edited by
                            #13

                            Merci de votre réponse, à présent il me faut comprendre.

                            1 Reply Last reply
                            0

                            • Login

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups
                            • Search
                            • Get Qt Extensions
                            • Unsolved