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 :

Les classes de Qt


Sujet :

Qt

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut Les classes de Qt
    Bonjour,

    Petite question si vous savez; je survole la classe QLineEdit pour voir exactement comment elle est faite, et dans chaque méthode ou presque, ces méthodes sont faites de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Q_D(QLineEdit);
        d->frame = enable
    Je me demandais donc à quoi correspond "Q_D".
    Merci d'avance et bonne journée

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut
    En cherchant vite fait sur google
    http://lists.trolltech.com/qt-intere.../msg00765.html

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Donc en gros, c'est du cast à chaque fois sur "reinterpert" c'est ça?

    Ou cela peut-il mener et y'a t'il possibilité de réutiliser ceci dans mon code; par exemple en recopiant purement la méthode copy() de la classe QLineEdit pour mes lineEdits de ma classe héritant de QWidget?

    La notion de cast est encore obscure dans mon apprentissage du C++

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Somato Voir le message
    Donc en gros, c'est du cast à chaque fois sur "reinterpert" c'est ça?
    Non.
    Je te laisse regarder ceci
    http://qt.developpez.com/doc/latest/shared.html
    D'ailleurs tu retrouvera d

    Pour les cast
    http://cpp.developpez.com/faq/cpp/?p...s#DIVERS_casts

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Je pense comprendre ce qu'il se passe, reinterpret et quelque chose de spécifique au C++ pour du cast sur des objets n'ayant aucun rapport entre eux (je me suis fié à un autre sujet de developpez.net dans la section C++)

    Donc, corrigez moi si je me trompe, on force à chaque fois en castant des méthodes déjà éxistantes dans d'autres classes?
    Donc lorsque j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void QLineEdit::copy() const
    {
        Q_D(const QLineEdit);
        d->copy();
    }
    On va cherche une autre méthode copy() d'une autre classe de Qt?


    EDIT: Je vais regarder les liens que tu viens de me fournir.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Somato Voir le message
    Je pense comprendre ce qu'il se passe, reinterpret et quelque chose de spécifique au C++ pour du cast sur des objets n'ayant aucun rapport entre eux
    Il ne sont pas obligé oui

    On va cherche une autre méthode copy() d'une autre classe de Qt?
    En gros oui. Cela permet d'accéder à l'implémentation privé de la class

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Pour ta qlineedit, regarde qlineedit_p.h. C'est la partie privé de qlineedit

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Merci pour les liens, ils vont m'être utile.

    Je regarde tout de suite qlineedit_p.h

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Je ne trouve pas de qlineedit_p.cpp avec la fonction rechercher de windows.
    Or dans qlineedit_p.h je ne trouve que ceci (concernant copy):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef QT_NO_CLIPBOARD
        void copy(bool clipboard = true) const;
    Il n'y a pas de corps de méthode? Je ne vois pas trop du coup :s

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Somato Voir le message
    Il n'y a pas de corps de méthode? Je ne vois pas trop du coup :s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void QLineEditPrivate::copy(bool clipboard) const
    {
        Q_Q(const QLineEdit);
        QString t = q->selectedText();
        if (!t.isEmpty() && echoMode == QLineEdit::Normal) {
            q->disconnect(QApplication::clipboard(), SIGNAL(selectionChanged()), q, 0);
            QApplication::clipboard()->setText(t, clipboard ? QClipboard::Clipboard : QClipboard::Selection);
            q->connect(QApplication::clipboard(), SIGNAL(selectionChanged()),
                       q, SLOT(_q_clipboardChanged()));
        }
    }
    dans qlineedit.cpp

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Ah d'accord merci bien!
    Je comprends mieux maintenant comment ça se passe.
    à la prochaine et encore merci pour tout

    Par contre il y a autre chose: les icones de copy/cut/paste de ma mainWindow ne fonctionnent pas encore sur mes QLineEdit mais les commandes via clavier sont opérationnelles (ctrl+c, ...).

    Est-ce que les commandes clavier sont opérationnelles puisque c'est QLineEdit qui veut ça, ou ce n'est pas du tout en rapport avec QLineEdit et c'est mon windows qui gère ça dans tout les cas?
    J'espère me faire comprendre...

  12. #12
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Citation Envoyé par Somato Voir le message
    Par contre il y a autre chose: les icones de copy/cut/paste de ma mainWindow ne fonctionnent pas encore sur mes QLineEdit mais les commandes via clavier sont opérationnelles (ctrl+c, ...).

    Est-ce que les commandes clavier sont opérationnelles puisque c'est QLineEdit qui veut ça, ou ce n'est pas du tout en rapport avec QLineEdit et c'est mon windows qui gère ça dans tout les cas?
    J'espère me faire comprendre...
    C'est déjà géré par QLineEdit ces raccourcis. On peut voir le code stp?

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Je ne sais pas si mes lignes de code pourront plus vous aidez, enfin surement qui oui, mais je sais d'avance ce qui va pas dans mon code puisque je me base plus ou moins sur les exemples fournis avec Qt.

    Pour ce cas précis, je me suis servis de l'exemple "main window"->"mdi window". Où nous avons une classe mainWindow héritant de QMainWindow comportant les méthodes cut(), copy(), paste() qui dans leurs déclarations renvoient aux méthodes cut(), copy(), paste() d'une autre classe héritant elle de QLineEdit.
    Mon problème est que dans mon cas, ma seconde classe n'hérite pas de QLineEdit mais de QWidget.
    Je voudrais donc récupérer les méthodes de QLineEdit pour ma classe afin de gérer mes propre lineedit.

    Le soucis est que je me demande quelle sera le mieux pour ce faire: le plus propre, le moins lourd (sachant que du code propre, moi, je ne sais pas encore completement ce que c'est disons que je m'en fais une grosse idée)

    Voici quelques lignes de mon .cpp tout de même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         copierAct = new QAction(QIcon(":/images/copier.bmp"), tr("&Copier"), this);
         copierAct->setShortcut(tr("Ctrl+C"));
         copierAct->setStatusTip(tr("Copie le texte selectionné dans le presse papier"));
         connect(copierAct, SIGNAL(triggered()), this, SLOT(copy()));
    Ce code est utilisé pour afficher une fenêtre mdi grace au menu nouveau de ma MainWindow (appelée FenetrePrinc) et ma classe FicheProprietaire serait donc la classe mdiChild dans l'exemple Qt:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    void FenetrePrinc::nouveau()
    {
          bool ok = false;
          QList<QString> choixNouveau;
                choixNouveau.append("Choisir...");
                choixNouveau.append("Fiche Proprietaire");
                choixNouveau.append("Fiche Locataire");
                QString chaine = QInputDialog::getItem(this, "Nouvelle fiche", 
                                                     "Quelle genre de fiche voulez-vous créer ?", 
                                                      choixNouveau,  0, false, &ok);
     
                if (chaine == "Fiche Proprietaire" && ok == true)
                    {ouvrirFichePro();}
                else if (chaine == "Fiche Locataire" && ok == true)
                    {ouvrirFicheLoc();}
                else if (chaine == "Choisir..." && ok == true)
                    {QMessageBox::information(this, "Donnée manquante", 
                     "Veuillez choisir un type de fiche dans la liste proposée");
                     }
    }
     
     
    void FenetrePrinc::ouvrirFichePro()
    {
         FicheProprietaire *fichePro = new FicheProprietaire();
         //fichePro->setFocus(Qt::MenuBarFocusReason);
         QScrollArea *scrollArea = new QScrollArea;
         scrollArea->setWidget(fichePro);
         mdiArea->addSubWindow(scrollArea);
     
         scrollArea->show();
    }

  14. #14
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Citation Envoyé par Somato Voir le message
    Pour ce cas précis, je me suis servis de l'exemple "main window"->"mdi window". Où nous avons une classe mainWindow héritant de QMainWindow comportant les méthodes cut(), copy(), paste() qui dans leurs déclarations renvoient aux méthodes cut(), copy(), paste() d'une autre classe héritant elle de QLineEdit.
    Mon problème est que dans mon cas, ma seconde classe n'hérite pas de QLineEdit mais de QWidget.
    Je voudrais donc récupérer les méthodes de QLineEdit pour ma classe afin de gérer mes propre lineedit.
    Euh, je comprends pas où et comment se place ton QLineEdit dans l'histoire ?! Un bout de déclaration stp

  15. #15
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Alors voici quelques QLineEdit entres autres:
    (A savoir: FicheProprietaire hérite de Fiche qui hérite de QWidget.)

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Fiche::Fiche()
    {
        renseignement();          
     	layout = new QGridLayout;
            layout->addWidget(informationGroupe, 0, 0);
        setLayout(layout);
    }
     
     
    void Fiche::renseignement()
    {
        informationGroupe = new QGroupBox(tr("Informations"), this); 
        informationLayout = new QGridLayout;
     
        //Civilité
        LABELcivilite = new QLabel(tr("Civilité: "), this);
            civilite = new QComboBox(this);
                civilite->addItem(tr("Choisir..."));
                civilite->addItem(tr("Monsieur"));
                civilite->addItem(tr("Madame"));
                civilite->addItem(tr("Mademoiselle"));
                    informationLayout->addWidget(LABELcivilite, 0, 0);
                    informationLayout->addWidget(civilite, 0, 1);
     
        //numéro comptable       
        LABELnumComptaPropri = new QLabel(tr("               N° Comptable Propriétaire: "), this);
            numComptaPropri = new QLineEdit(this);
            numComptaPropri->setMaxLength(5);
            numComptaPropri->setFixedWidth(40);
                   informationLayout->addWidget(LABELnumComptaPropri, 0, 2);
                   informationLayout->addWidget(numComptaPropri, 0, 3);
     
        //nom    
        LABELnom = new QLabel(tr("Nom: "), this); 
            nom = new QLineEdit(this);
                   informationLayout->addWidget(LABELnom, 1, 0);
                   informationLayout->addWidget(nom, 1, 1);
     
        //prénom 
        LABELprenom = new QLabel(tr("Prénom: "), this);
            prenom = new QLineEdit(this);
                   informationLayout->addWidget(LABELprenom, 2, 0);
                   informationLayout->addWidget(prenom, 2, 1);
     
        //date de naissance    
        LABELdateDeNaissance = new QLabel(tr("               Date de naissance: "), this);
            dateDeNaissance = new QLineEdit(this);
            dateDeNaissance->setMaxLength(8);
            dateDeNaissance->setFixedWidth(70);
            dateDeNaissance->setInputMask("00/00/0000");
            dateDeNaissance->setText("00000000");
            //dateDeNaissance->setCursorPosition(0);
                   informationLayout->addWidget(LABELdateDeNaissance, 1, 2);
                   informationLayout->addWidget(dateDeNaissance, 1, 3);
    Un bout du .h aussi:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #ifndef FICHE_H
    #define FICHE_H
     
    #include <QWidget> // inheriting class's header file
    #include <QApplication>
    #include <QLineEdit>
    #include <QComboBox>
    #include <QLabel>
    #include <QGridLayout>
    #include <QGroupBox>
    #include <QList>
     
    class Fiche : public QWidget
    {
          Q_OBJECT
     
    	public:
    		Fiche();
     
        protected:
            void renseignement();
     
     
            QGroupBox *informationGroupe;
            QGridLayout *informationLayout;
            QGridLayout *layout;
     
            QComboBox *civilite;
            QLineEdit *numComptaPropri;
            QLineEdit *nom;
            QLineEdit *prenom;
            QLineEdit *dateDeNaissance; 
             QLabel *LABELcivilite;
             QLabel *LABELnumComptaPropri;
             QLabel *LABELnom;
             QLabel *LABELprenom;
             QLabel *LABELdateDeNaissance;
    J'espère que ça correspond à ce que vous vouliez voir

  16. #16
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Ok, donc tu as une action copier (etc.. je vais pas les énumérer) à associer à ton widget Fiche (donc tu ajoutes les slots nécessaires). Dans ces slots, tu récupéres le widget qui a le focus, tu castes en QLineEdit*, et si ça fonctionne, tu transmets l'appel.

  17. #17
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    D'accord, je vois mieux le chemin à suivre mais il y a quand même un point obscure: dans mes classes (y compris dans la classe Fiche), je n'ai pas que des QLineEdit comme Widget (sinon, j'héritais directement de QLineEdit et je n'avais plus de problème de transtypage).

    Donc si le focus est sur un QWidget autre qu'un QLineEdit, nécessairement ça va poser problème non?

    Donc comment dois-je gerer cela proprement, avec une QList<QLineEdit *> ?
    Que me conseillez-vous?

  18. #18
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Bah oui, ça va poser problème.... c'est pour ça que je te dis de vérifier le retour du cast. De dynamic_cast.
    Je vois pas en quoi utiliser une QList t'aiderait?

  19. #19
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Pour la QList, je pensais à réunir tous mes LineEdit afin de n'appliquer les méthodes de QLineEdit qu'à eux seuls. Si c'est pas une bonne méthode, je l'abandonne.

    Pour le dynamic_cast avec le retour du transtypage, ne faut il pas que mes classes mères soient déplarées en virtual pour que cela soit réalisé?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Fiche : virtual public QWidget //Or cela pose problème à prioris
    Je suis en train de suivre en parallèle un tuto C++ d'ici même sur le transtypage, mais c'est encore laborieux (comme vous pouvez très certainement le remarquer).

    EDIT: après avoir regardé certains petits tuto, il semblerai qu'une seule méthode de la classe déclarée en virtual suffise, j'ai vérifié dans QWidget et ai rémarqué qu'il y en avait plus d'une. Donc je suppose que le problème de la déclaration en virtual ne ce fait pas ici...

  20. #20
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Pas besoin de méthode/héritage virtuelle pour faire ça

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

Discussions similaires

  1. [Taglibs] Utiliser les classes css ?
    Par PeteMitchell dans le forum Struts 1
    Réponses: 4
    Dernier message: 05/05/2007, 01h31
  2. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  3. Les classes ne s'affichent pas
    Par karl3i dans le forum MFC
    Réponses: 8
    Dernier message: 26/01/2004, 14h52
  4. delocaliser les classe
    Par otb82 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 17/11/2003, 08h54
  5. Les classes amies en Delphi
    Par Bruno75 dans le forum Langage
    Réponses: 3
    Dernier message: 02/09/2003, 19h34

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