Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. French
  4. Probleme avec QSQLTABLEMODEL (Méthode data(const QModelIndex &index, int role)

Probleme avec QSQLTABLEMODEL (Méthode data(const QModelIndex &index, int role)

Scheduled Pinned Locked Moved Unsolved French
7 Posts 5 Posters 1.8k 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 26 Jan 2019, 10:34 last edited by koahnig
    #1

    Bonjour,

    Je ne parvient pas à faire fonctionner la méthode data(...). Il semble qu'elle est ignorée à l'exécution. voici mon code,

    merci de votre aide.

    #include "widget.h"
    #include "ui_widget.h"
      
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
      
        QString file = "C:\\DIVERS\\bd1.accdb";
               QSqlDatabase mDatabase;
               mDatabase = QSqlDatabase::addDatabase("QODBC");
               QString dataBaseString = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=" + file;
               mDatabase.setDatabaseName(dataBaseString);
      
               mDatabase.open();
      
                mModele = new QSqlTableModel(this);
               mRequete = new QSqlQuery();
                   mRequete->prepare("SELECT Numero, Nom FROM Compte WHERE Numero > 10 and Numero < 25");
    mRequete->exec();
    mModele->setQuery(*mRequete);  
      
    ui->tableView->setModel(mModele);
      
                   ui->tableView->show();
    }
      
    Widget::~Widget()
    {
        delete ui;
      
                  
        
    QVariant Widget::data ( const QModelIndex & index, int role = Qt::DisplayRole )const
       {
      
          if(role==Qt::BackgroundRole)
          {
            return QColor(Qt::red);
                 }
          return  QVariant();
       }
      
    void Widget::on_pushButton_clicked()
    {
         QModelIndex idx;
        idx = mModele->index(1,1,QModelIndex());
      
        mModele->data(idx,Qt::BackgroundRole);
      
        ui->tableView->setModel(mModele);
      
                       ui->tableView->show();
    }
    
    K J 2 Replies Last reply 26 Jan 2019, 10:51
    0
    • L lacombe
      26 Jan 2019, 10:34

      Bonjour,

      Je ne parvient pas à faire fonctionner la méthode data(...). Il semble qu'elle est ignorée à l'exécution. voici mon code,

      merci de votre aide.

      #include "widget.h"
      #include "ui_widget.h"
        
      Widget::Widget(QWidget *parent) :
          QWidget(parent),
          ui(new Ui::Widget)
      {
          ui->setupUi(this);
        
          QString file = "C:\\DIVERS\\bd1.accdb";
                 QSqlDatabase mDatabase;
                 mDatabase = QSqlDatabase::addDatabase("QODBC");
                 QString dataBaseString = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=" + file;
                 mDatabase.setDatabaseName(dataBaseString);
        
                 mDatabase.open();
        
                  mModele = new QSqlTableModel(this);
                 mRequete = new QSqlQuery();
                     mRequete->prepare("SELECT Numero, Nom FROM Compte WHERE Numero > 10 and Numero < 25");
      mRequete->exec();
      mModele->setQuery(*mRequete);  
        
      ui->tableView->setModel(mModele);
        
                     ui->tableView->show();
      }
        
      Widget::~Widget()
      {
          delete ui;
        
                    
          
      QVariant Widget::data ( const QModelIndex & index, int role = Qt::DisplayRole )const
         {
        
            if(role==Qt::BackgroundRole)
            {
              return QColor(Qt::red);
                   }
            return  QVariant();
         }
        
      void Widget::on_pushButton_clicked()
      {
           QModelIndex idx;
          idx = mModele->index(1,1,QModelIndex());
        
          mModele->data(idx,Qt::BackgroundRole);
        
          ui->tableView->setModel(mModele);
        
                         ui->tableView->show();
      }
      
      K Offline
      K Offline
      koahnig
      wrote on 26 Jan 2019, 10:51 last edited by
      #2

      @lacombe

      Hi and welcome in devnet forum

      Please use only English in the general forum. For different lanuguages there are specific fora https://forum.qt.io/category/57/french

      Vote the answer(s) that helped you to solve your issue(s)

      1 Reply Last reply
      3
      • M Offline
        M Offline
        mrjj
        Lifetime Qt Champion
        wrote on 26 Jan 2019, 11:09 last edited by mrjj
        #3

        Hi
        "I can not run the data (...) method. It seems she is ignored at runtime. here is my code,
        Thank you for your help."

        Hi
        Hope you read english ;)
        There seems to be some sort of mix up as
        QVariant Widget::data ( const QModelIndex & index, int role = Qt::DisplayRole )const
        is just a function you added to a QWidget.
        Normally such function would be inside a custom Model but you are using QSqlTableModel
        which already have its own.

        However, its possible to call its setData for a index to set any of the roles ( like Qt::BackgroundRole)
        like you do in

        void Widget::on_pushButton_clicked()
        {
             QModelIndex idx;
            idx = mModele->index(1,1,QModelIndex());  
        //    this reads the variant at idx for that role : 
        QVariant data= mModele->data(idx,Qt::BackgroundRole);
        // this set it
          mModele->setData(idx,  Qt::red, Qt::BackgroundRole);
          ui->tableView->setModel(mModele);  
          ui->tableView->show();
        }
        
        1 Reply Last reply
        1
        • L lacombe
          26 Jan 2019, 10:34

          Bonjour,

          Je ne parvient pas à faire fonctionner la méthode data(...). Il semble qu'elle est ignorée à l'exécution. voici mon code,

          merci de votre aide.

          #include "widget.h"
          #include "ui_widget.h"
            
          Widget::Widget(QWidget *parent) :
              QWidget(parent),
              ui(new Ui::Widget)
          {
              ui->setupUi(this);
            
              QString file = "C:\\DIVERS\\bd1.accdb";
                     QSqlDatabase mDatabase;
                     mDatabase = QSqlDatabase::addDatabase("QODBC");
                     QString dataBaseString = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=" + file;
                     mDatabase.setDatabaseName(dataBaseString);
            
                     mDatabase.open();
            
                      mModele = new QSqlTableModel(this);
                     mRequete = new QSqlQuery();
                         mRequete->prepare("SELECT Numero, Nom FROM Compte WHERE Numero > 10 and Numero < 25");
          mRequete->exec();
          mModele->setQuery(*mRequete);  
            
          ui->tableView->setModel(mModele);
            
                         ui->tableView->show();
          }
            
          Widget::~Widget()
          {
              delete ui;
            
                        
              
          QVariant Widget::data ( const QModelIndex & index, int role = Qt::DisplayRole )const
             {
            
                if(role==Qt::BackgroundRole)
                {
                  return QColor(Qt::red);
                       }
                return  QVariant();
             }
            
          void Widget::on_pushButton_clicked()
          {
               QModelIndex idx;
              idx = mModele->index(1,1,QModelIndex());
            
              mModele->data(idx,Qt::BackgroundRole);
            
              ui->tableView->setModel(mModele);
            
                             ui->tableView->show();
          }
          
          J Offline
          J Offline
          JonB
          wrote on 26 Jan 2019, 11:33 last edited by JonB
          #4

          @lacombe

          mModele->data(idx,Qt::BackgroundRole);
          

          Ca ne fait rien. La methode data() renvoie quelque chose, vous ne faites rien avec ca. Ou bien vous voulez utiliser setData()?

          QVariant Widget::data ( const QModelIndex & index, int role = Qt::DisplayRole )const
             {
                  if(role==Qt::BackgroundRole)
                {
                  return QColor(Qt::red);
                       }
                return  QVariant();
             }
          

          D'abord la methode data() qui vous interesse appartient a QSqlTableModel et pas a QWidget. Aussi avec return QVariant(); elle ne renvoie rien sauf lorsque role==Qt::BackgroundRole. Utilisez le modele:

          class MySqlTableModel : public QSqlTableModel
          ...
          QVariant MySqlTableModel::data ( const QModelIndex & index, int role = Qt::DisplayRole )const
           {
                if(role==Qt::BackgroundRole)
                {
                    return QColor(Qt::red);
                }
                return  QSqlTableModel::data(index, role);
          }
          

          Lisez bien ce que @mrjj a ecrit!

          1 Reply Last reply
          1
          • L Offline
            L Offline
            lacombe
            wrote on 26 Jan 2019, 13:17 last edited by
            #5

            Merci beaucoup pour ces renseignements, mais comment fait on pour déclencher la coloration en rouge avec le clic sur le bouton ?
            Comment activer cette méthode ?
            Merci pour votre aide.

            1 Reply Last reply
            0
            • M Offline
              M Offline
              mrjj
              Lifetime Qt Champion
              wrote on 26 Jan 2019, 13:20 last edited by
              #6

              "Thank you very much for this information, but how does one trigger the coloring in red with the click of the button?
              How to activate this method?
              Thanks for your help."

              vous utilisez les modles setData

              void Widget::on_pushButton_clicked()
              {
              QModelIndex idx = mModele->index(1,1,QModelIndex()); // assurez-vous que row, col est correct (1,1)
              mModele->setData(idx, Qt::red, Qt::BackgroundRole);
              }

              1 Reply Last reply
              1
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on 26 Jan 2019, 13:27 last edited by
                #7

                Bonjour,

                La question a été déplacée dans la section française.

                Si vous ne voulez pas réimplémenter QSqlTableModel, le plus simple est d'utiliser QIdentityProxyModel et de retourner rouge pour le rôle Qt::BackgroundRole et les information d'origine pour tout le reste comme démontré dans l'example de code de la documentation.

                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

                1/7

                26 Jan 2019, 10:34

                • Login

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