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

Bases de données Discussion :

De QSqlQueryModel à QAbstractItemModel*


Sujet :

Bases de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    IRIS
    Inscrit en
    Septembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : IRIS
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 55
    Points : 35
    Points
    35
    Par défaut De QSqlQueryModel à QAbstractItemModel*
    Bonjour,

    Tout d'abord ça fait un petit moment que je n'ai pas touché à la programmation et il y a des erreurs c'est certain notamement dans le fait que mon problème vient d'une classe abstraite

    Je fait un petit programme qui recupère les données d'une table dans une base de donnée SQLite et les affiche sous forme de tableau afin de l'imprimer.

    J'ai donc deux classes, une qui gère la base de donnée et l'autre qui gère l'IHM

    Voici la declaration de la fonction dans Database.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QSqlQueryModel Semainier(QSqlQueryModel &model,QString Agent,QDate Date);
    La fonction dans le *.cpp

    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
     
    QSqlQueryModel database::Semainier(QSqlQueryModel &model,QString Agent, QDate Date)
    {
     
        model.setQuery("SELECT Poste,Description,OG1,Heure1,OG2,Heure2,Vehicule,Forfait FROM Activite WHERE Agent ='"+Agent+"' AND Date ="+Date);
        model.setHeaderData(0,Qt::Horizontal,tr("Poste"));
        model.setHeaderData(1,Qt::Horizontal,tr("Description"));
        model.setHeaderData(2,Qt::Horizontal,tr("OG1"));
        model.setHeaderData(3,Qt::Horizontal,tr("Heures"));
        model.setHeaderData(4,Qt::Horizontal,tr("OG2"));
        model.setHeaderData(5,Qt::Horizontal,tr("Heures"));
        model.setHeaderData(6,Qt::Horizontal,tr("Vehicule"));
        model.setHeaderData(7,Qt::Horizontal,tr("Forfait"));
     
        return model;
     
    }
    Et l'appel de la fonction dans l'IHM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void FenetreVisualisation::AfficherTableau()
    {
        database *db = new database();
        if (db->opendb())
        {
            QSqlQueryModel *model = new QSqlQueryModel;
     
            ui->ViewSemainier->setModel(db->Semainier(*model,ui->comboBoxAgent->currentText(),ui->dateEdit->date()));
            ui->ViewSemainier->show();
        }
        else
        {
     
        }
    et lorsque je compile j'ai les erreurs suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    C:\Documents and Settings\MicroSCADA\Mes documents\Application cahier blanc\Cahier_Blanc\fenetrevisualisation.cpp:-1: In member function 'void FenetreVisualisation::AfficherTableau()':
    C:\Documents and Settings\MicroSCADA\Mes documents\Application cahier blanc\Cahier_Blanc\fenetrevisualisation.cpp:19: erreur : no matching function for call to 'QTableView::setModel(QSqlQueryModel)'
             ui->ViewSemainier->setModel(db->Semainier(*model,ui->comboBoxAgent->currentText(),ui->dateEdit->date()));
                                                                                                                    ^
    C:\Documents and Settings\MicroSCADA\Mes documents\Application cahier blanc\Cahier_Blanc\fenetrevisualisation.cpp:19: candidate is:
    C:\Qt\5.2.0\mingw48_32\include\QtWidgets\QTableView:1: In file included from ..\..\..\..\..\Qt\5.2.0\mingw48_32\include/QtWidgets/QTableView:1:0,
    C:\Documents and Settings\MicroSCADA\Mes documents\Application cahier blanc\build-Cahier_Blanc-Desktop_Qt_5_2_0_MinGW_32bit-Debug\ui_fenetrevisualisation.h:22: from ./ui_fenetrevisualisation.h:22,
    C:\Documents and Settings\MicroSCADA\Mes documents\Application cahier blanc\Cahier_Blanc\fenetrevisualisation.cpp:2: from ..\Cahier_Blanc\fenetrevisualisation.cpp:2:
    C:\Qt\5.2.0\mingw48_32\include\QtWidgets\qtableview.h:68: virtual void QTableView::setModel(QAbstractItemModel*)
         void setModel(QAbstractItemModel *model);
              ^
    C:\Qt\5.2.0\mingw48_32\include\QtWidgets\qtableview.h:68: note:   no known conversion for argument 1 from 'QSqlQueryModel' to 'QAbstractItemModel*'
    j'ai cherché une journée complete, je m'en remet à vous, je sais que mon erreur est conne mais j'ai du mal :s

    Merci beaucoup !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est en fait le retour de la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    db->Semainier(*model,ui->comboBoxAgent->currentText(),ui->dateEdit->date())
    qui pose problème par rapport à setModel().

    Étant donné que la classe QSqlQueryModel n'est pas copiable, tu ne peux pas retourner un objet QSqlQueryModel comme cela. Il faut au mieux que tu retournes la même référence que tu rentres comme ceci (on préfère rentrer des références constantes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QSqlQueryModel & database::Semainier(QSqlQueryModel &model,QString /* const & */ Agent, QDate /* const & */ Date)
    {
        // ...
        return model;
    }
    Ce qui te permettra de directement prendre son adresse au retour et de ce fait, passer un pointeur à setModel() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ui->ViewSemainier->setModel(&db->Semainier(*model,ui->comboBoxAgent->currentText(),ui->dateEdit->date()));
    Voire passer et retourner directement le pointeur que tu as à l'origine.

    Tu auras par la suite un autre problème sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    model.setQuery("SELECT Poste,Description,OG1,Heure1,OG2,Heure2,Vehicule,Forfait FROM Activite WHERE Agent ='"+Agent+"' AND Date ="+Date);
    Tu ne peux pas directement concaténer un QString à une date. Sers-toi de sa méthode QDate::toString().
    Dernière modification par Invité ; 06/06/2014 à 22h59.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    IRIS
    Inscrit en
    Septembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : IRIS
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 55
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup de cette reponse ! C'etais effectivement le problème et c'est réglé... d'autre problème viennent ensuite mais rien d'insurmontable je pense ! Merci beaucoup !!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/04/2011, 19h40
  2. Tri avec QSqlQueryModel et QTableView
    Par mr404 dans le forum Bases de données
    Réponses: 5
    Dernier message: 28/10/2008, 18h42
  3. QAbstractItemModel et QListView
    Par Floréal dans le forum Qt
    Réponses: 8
    Dernier message: 25/09/2007, 13h42

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