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 :

[eclipse CDT,Qt] héritage multiple


Sujet :

Qt

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut [eclipse CDT,Qt] héritage multiple
    Bonjour,

    j'ai le livre "Qt4 et C++, programmation d'interfaces GUI", et un des premiers exemple ne marche pas chez moi:

    le livre expose un programme de tableur(enfin je crois, je n'en suis qu'au début).
    La première QDialog est créée entièrement par du code, mais pas la seconde, qui est créée avec le RAD d'eclipse; peu importe ce qu'elle fait (affichage d'une boîte de dialogue pour aller à une autre cellule; il est plus intéressant de savoir que la classe créée à partir de gotocelldialog.ui, qui s'appelle Ui::gotocelldialog, sert dans un héritage double, la deuxième parente étant QDialog(voir la ligne marquée d'une flèche). La classe fille, GoToCellDialog, devrait posséder une méthode show(), or il semble que le compilateur ne la trouve pas.

    mis en application cela donne:

    -fichier ui_gotocelldialog.h(seules les 10 dernières lignes sont importantes)
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    /********************************************************************************
    ** Form generated from reading ui file 'gotocelldialog.ui'
    **
    ** Created: Fri 13. Jun 19:43:45 2008
    **      by: Qt User Interface Compiler version 4.4.0
    **
    ** WARNING! All changes made in this file will be lost when recompiling ui file!
    ********************************************************************************/
     
    #ifndef UI_GOTOCELLDIALOG_H
    #define UI_GOTOCELLDIALOG_H
     
    #include <QtCore/QVariant>
    #include <QtGui/QAction>
    #include <QtGui/QApplication>
    #include <QtGui/QButtonGroup>
    #include <QtGui/QHBoxLayout>
    #include <QtGui/QLabel>
    #include <QtGui/QLineEdit>
    #include <QtGui/QPushButton>
    #include <QtGui/QSpacerItem>
    #include <QtGui/QVBoxLayout>
    #include <QtGui/QWidget>
     
    QT_BEGIN_NAMESPACE
     
    class Ui_GoToCellDialog
    {
    public:
        QVBoxLayout *verticalLayout;
        QHBoxLayout *horizontalLayout_2;
        QLabel *label;
        QLineEdit *lineEdit;
        QHBoxLayout *horizontalLayout;
        QSpacerItem *horizontalSpacer;
        QPushButton *okButton;
        QPushButton *cancelButton;
     
        void setupUi(QWidget *GoToCellDialog)
        {
        if (GoToCellDialog->objectName().isEmpty())
            GoToCellDialog->setObjectName(QString::fromUtf8("GoToCellDialog"));
        GoToCellDialog->resize(224, 73);
        verticalLayout = new QVBoxLayout(GoToCellDialog);
        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
        horizontalLayout_2 = new QHBoxLayout();
        horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
        label = new QLabel(GoToCellDialog);
        label->setObjectName(QString::fromUtf8("label"));
     
        horizontalLayout_2->addWidget(label);
     
        lineEdit = new QLineEdit(GoToCellDialog);
        lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
     
        horizontalLayout_2->addWidget(lineEdit);
     
     
        verticalLayout->addLayout(horizontalLayout_2);
     
        horizontalLayout = new QHBoxLayout();
        horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
        horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
     
        horizontalLayout->addItem(horizontalSpacer);
     
        okButton = new QPushButton(GoToCellDialog);
        okButton->setObjectName(QString::fromUtf8("okButton"));
        okButton->setEnabled(false);
        okButton->setDefault(true);
     
        horizontalLayout->addWidget(okButton);
     
        cancelButton = new QPushButton(GoToCellDialog);
        cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
     
        horizontalLayout->addWidget(cancelButton);
     
     
        verticalLayout->addLayout(horizontalLayout);
     
        label->setBuddy(lineEdit);
        QWidget::setTabOrder(lineEdit, okButton);
        QWidget::setTabOrder(okButton, cancelButton);
     
        retranslateUi(GoToCellDialog);
     
        QMetaObject::connectSlotsByName(GoToCellDialog);
        } // setupUi
     
        void retranslateUi(QWidget *GoToCellDialog)
        {
        GoToCellDialog->setWindowTitle(QApplication::translate("GoToCellDialog", "go to cell", 0, QApplication::UnicodeUTF8));
        label->setText(QApplication::translate("GoToCellDialog", "&Cell location", 0, QApplication::UnicodeUTF8));
        okButton->setText(QApplication::translate("GoToCellDialog", "OK", 0, QApplication::UnicodeUTF8));
        cancelButton->setText(QApplication::translate("GoToCellDialog", "Cancel", 0, QApplication::UnicodeUTF8));
        Q_UNUSED(GoToCellDialog);
        } // retranslateUi
     
    };
     
    namespace Ui {
        class GoToCellDialog: public Ui_GoToCellDialog {};   // <-----------
    } // namespace Ui
     
    QT_END_NAMESPACE
     
    #endif // UI_GOTOCELLDIALOG_H
    fichier gotocelldialog.h
    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
     
    #ifndef GOTOCELLDIALOG_H_
    #define GOTOCELLDIALOG_H_
     
    #include <QDialog>
    #include "ui_gotocelldialog.h"
     
    class GoToCellDialog : public QDialog,public Ui::GoToCellDialog
    {
    	Q_OBJECT
     
    public:
    	GoToCellDialog (QWidget* parent=0);
     
    private slots:
    	void on_lineEdit_textChanged();
     
    };
     
     
    #endif /*GOTOCELLDIALOG_H_*/
    fichier gotocelldialog.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
    18
    19
    20
    21
    22
     
    #include <QtGui>
    #include <QDialog>
    #include "gotocelldialog.h"
     
    GoToCellDialog::GoToCellDialog(QWidget* parent) : QDialog(parent)
    	{
    	setupUi(this);
    	QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
     
    	lineEdit->setValidator(new QRegExpValidator(regExp,this));
     
    	connect(okButton,SIGNAL(clicked()),this,SLOT(accept()));
    	connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
     
    	}
     
    void GoToCellDialog::on_lineEdit_textChanged()
    {
    	okButton->setEnabled(lineEdit->hasAcceptableInput());
     
    }
    enfin; fichier main.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
    18
    19
    20
    21
    22
    23
     
    #include <QtGui>
    #include <QApplication>
    #include <QDialog>
    //#include "finddialog.h"
    #include "ui_gotocelldialog.h"
     
     
    int main(int argc,char* argv[])
    {
    	QApplication app(argc,argv);
    	//FindDialog* dialog=new FindDialog;
    	//dialog->show();
     
    	//Ui::GoToCellDialog ui;
    	//QDialog* dialog=new QDialog;
    	//ui.setupUi(dialog);
    	//dialog->show();
     
    	GoToCellDialog* dialog; //=new GoToCellDialog; <--  <--
    	dialog->show();
     
    	return app.exec();




    et l'erreur est:

    "dialog undeclared(first use in this function)" et une deuxième:
    " 'GoToCellDilaog' undeclared" (first use in this function), à la ligne marquée de 2 flèches.

    J'ai cherché comment résoudre ce problème mais sans succès, si il faut déclarer la variable dialog ailleurs je ne vois pas où.

    lolveley.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Je crois que tu melanges bcp de choses.

    Je n'ai pas lu le livre, mais je pense que le "RAD d'eclipse" n'est autre que Qt Designer, qui est un outil de Qt independant d'eclipse. Cet outil te pond un xml descriptif de l'interface, qui peut etre compile via uic afin de generer du code C++. C'est le ui_gotocelldialog.h que tu obtiens.

    Cette classe generee par uic n'est pas utilisable directement. L'heritage multiple est une des possibilites, ce n'est pas la seule, tout est explique ici:
    http://qt.developpez.com/doc/latest/...component.html

    Ensuite ton erreur est une erreur de base de C++, a savoir que tu utilises un type qui n'est declare nulle part. Dans tes includes, aucun d'inclut un fichier definissant le type GoToCellDialog. En fait, tu inclus "ui_gotocelldialog.h" au lieu d'inclure "gotocelldialog.h", voila le probleme

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    merci, ç'est simple quand on sait quoi chercher.

    lolveley.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hai,
    Citation Envoyé par olivier57b Voir le message
    merci, ç'est simple quand on sait quoi chercher.

    lolveley.
    Ça fait partie de l'aide fournie avec Qt, donc en la regardant, tu aurais trouvé.
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Resolu?

  6. #6
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    ah oui, c'est résolu.
    merci,
    lolveley.

    PS: j'ai une erreur dans la suite (forum C++)
    à bon entendeur...

    lolveley.

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

Discussions similaires

  1. [heritage][conception]héritage multiple en java!
    Par soulhouf dans le forum Langage
    Réponses: 9
    Dernier message: 25/08/2005, 20h03
  2. L'héritage multiple est-il possible en Delphi ?
    Par SchpatziBreizh dans le forum Langage
    Réponses: 8
    Dernier message: 30/06/2005, 11h30
  3. utilisez vous l'héritage multiple ?
    Par vodosiossbaas dans le forum C++
    Réponses: 8
    Dernier message: 13/06/2005, 20h25
  4. [Install] Eclipse + CDT
    Par SpeCiE dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 25/03/2005, 16h39
  5. [XML Schemas]héritage multiple
    Par nicolas_jf dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 12h55

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