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 :

Utilisation de méthodes d'une classe avec ou sans instance


Sujet :

Qt

  1. #1
    Membre émérite
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Points : 2 278
    Points
    2 278
    Par défaut Utilisation de méthodes d'une classe avec ou sans instance
    Bonjour,

    J'ai remarqué quelque chose dans Qt (c'est pourquoi ce nouveau sujet atterrit ici), et ça me turlupine quelque peu. Cette chose, la voici: certaines méthodes peuvent être utilisées sans qu'on ait besoin d'instancier un objet de la classe à laquelle appartient cette méthode, comme QString::number(...); d'autres méthodes, en revanche, nécessite l'instanciation d'un objet de leur classe pour pouvoir être appelées, comme QDir::mkpath(QString path).
    La question: pourquoi?

    Merci d'avance pour vos lumières.

    PS: On devrait créer une rubrique spéciale pour ce genre de questions; elle pourrait même s'appeler «la question con du jour». J'y viendrai au moins une fois par semaine pour poster un nouveau sujet.
    De retour, plus sportif mais toujours aussi moche.
    _____________
    Pro: Programmation en C/C++ (embarqué ou non)
    Loisir: Programmation en C++11/14/17 avec la STL ou Qt 5

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut


    La fonction statique QString::number a pour objectif d'instancier une QString, ça n'a pas vraiment de sens d'obliger à avoir une QString pour en instancier une autre (sémantiquement, c'est à éviter : plus une usine qu'autre chose, une manière de détourner le constructeur – si on a besoin d'un objet instancié pour lancer le constructeur, ça devient maso ). http://qt.developpez.com/doc/4.7/qstring/#number
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre émérite
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Points : 2 278
    Points
    2 278
    Par défaut
    Je vois.

    Comment peut-on programmer une telle fonction?
    De retour, plus sportif mais toujours aussi moche.
    _____________
    Pro: Programmation en C/C++ (embarqué ou non)
    Loisir: Programmation en C++11/14/17 avec la STL ou Qt 5

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738

  5. #5
    Membre émérite
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Points : 2 278
    Points
    2 278
    Par défaut
    Merci.

    Je vais essayer me dépatouiller avec ça pour faire une fenêtre de dialogue à la QInputDialog, pour voir si j'ai bien compris ce qu'il en est.

    Adishatz!

    PS: J'ajoute la pastille mais si j'ai un souci avec ma fenêtre je déterre le sujet.
    De retour, plus sportif mais toujours aussi moche.
    _____________
    Pro: Programmation en C/C++ (embarqué ou non)
    Loisir: Programmation en C++11/14/17 avec la STL ou Qt 5

  6. #6
    Membre émérite
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Points : 2 278
    Points
    2 278
    Par défaut
    Bon! Je pense que je n'aurai pas à déterrer ce sujet, en fin de compte. Tant mieux: il pourra reposer en paix.

    PS: Désolé pour le double post.
    De retour, plus sportif mais toujours aussi moche.
    _____________
    Pro: Programmation en C/C++ (embarqué ou non)
    Loisir: Programmation en C++11/14/17 avec la STL ou Qt 5

  7. #7
    Membre émérite
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Points : 2 278
    Points
    2 278
    Par défaut
    Finalement, je m'autorise un triple post (sacré spécimen, n'est-il pas!) parce que mon code ne me satisfait pas: en effet, je le trouve assez «cradoc».
    Voici le code:

    Code i2ps_ssc_d.h : 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
    #ifndef I2PS_SSC_D_H
    #define I2PS_SSC_D_H
     
    //The new class inherits from
    #include <QDialog>
     
    //The new class needs
    #include <QCheckBox>
    #include <QDesktopServices>
    #include <QFileDialog>
    #include <QGroupBox>
    #include <QHBoxLayout>
    #include <QLineEdit>
    #include <QMap>
    #include <QPushButton>
    #include <QStyle>
    #include <QVBoxLayout>
     
    class I2PS_SSC_D : public QDialog
    {
        Q_OBJECT
     
        public:
            //Constructor
            I2PS_SSC_D(QWidget* parent = 0);
     
            //Destructor
            ~I2PS_SSC_D();
     
            //Getter
            static QMap<QString,QString> getIOFiles(QWidget* parent = 0, const QString& title = QString(), const QString& dir = QString(), const QString& filter = QString());
     
        public slots:
            virtual void accept();
            virtual void reject();
     
        private:
            //Private data fields for input
            QGroupBox* m_inputGroup;
                QHBoxLayout* m_inputLayout;
                QLineEdit* m_inputLine;
                QPushButton* m_inputFind;
                QString m_inputFilter;
     
            //Private data fields for output
            QGroupBox* m_outputGroup;
                QVBoxLayout* m_outputLayout;
                QHBoxLayout* m_outputSubLayout;
                QCheckBox* m_outputCheck;
                QLineEdit* m_outputLine;
                QPushButton* m_outputFind;
                QString m_outputFilter;
     
            //Privata data fields for controls
            QString m_dir;
            QMap<QString,QString> m_IO;
            QPushButton* m_cancel;
            QPushButton* m_OK;
     
            //Private methods for initialisations
            void initControls();
            void initInput();
            void initOutput();
     
        private slots:
            void inputChanged();
            void inputFindClicked();
            void outputCheckClicked(int state);
            void outputFindClicked();
     
    };
     
    #endif // I2PS_SSC_D_H

    Code i2ps_ssc_d.cpp : 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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    #include "i2ps_ssc_d.h"
     
    I2PS_SSC_D::I2PS_SSC_D(QWidget* parent) :
        QDialog                 (parent)                                    ,
        m_inputGroup            (new QGroupBox(tr("Source file"), this))    ,
            m_inputLayout       (new QHBoxLayout)                           ,
            m_inputLine         (new QLineEdit)                             ,
            m_inputFind         (new QPushButton)                           ,
            m_inputFilter       ()                                          ,
        m_outputGroup           (new QGroupBox(tr("Target file"), this))    ,
            m_outputLayout      (new QVBoxLayout)                           ,
            m_outputSubLayout   (new QHBoxLayout)                           ,
            m_outputCheck       (new QCheckBox)                             ,
            m_outputLine        (new QLineEdit)                             ,
            m_outputFind        (new QPushButton)                           ,
            m_outputFilter      ()                                          ,
        m_dir                   ()                                          ,
        m_IO                    ()                                          ,
        m_cancel                (new QPushButton(this))                     ,
        m_OK                    (new QPushButton(this))
    {
        setFixedHeight(260);
        setFixedWidth(400);
        setModal(true);
        setWindowTitle(tr("Choose the source file and the target file"));
     
        initInput();
        initOutput();
        initControls();
    }
     
    I2PS_SSC_D::~I2PS_SSC_D()
    {
        //Input
            delete m_inputLine;
            delete m_inputFind;
            delete m_inputLayout;
        delete m_inputGroup;
     
        //Output
            delete m_outputLine;
            delete m_outputFind;
            delete m_outputCheck;
            delete m_outputSubLayout;
            delete m_outputLayout;
        delete m_outputGroup;
     
        //Controls
        delete m_cancel;
        delete m_OK;
    }
     
    QMap<QString,QString> I2PS_SSC_D::getIOFiles(QWidget* parent, const QString& title, const QString& dir, const QString& filter)
    {
        I2PS_SSC_D dialog;
     
        if(dialog.parent() != 0)
            dialog.setParent(parent);
     
        if(!title.isEmpty())
            dialog.setWindowTitle(title);
     
        if(!dir.isEmpty())
            dialog.m_dir = dir;
        else
            dialog.m_dir = QDesktopServices::displayName(QDesktopServices::PicturesLocation);
     
        if(!filter.isEmpty())
            dialog.m_inputFilter = filter;
        else
            dialog.m_inputFilter = tr("Image (*.bmp *.dib *.gif *.jfif *.jpe *.jpeg *.jpg *.png *.tif *.tiff);;Bitmap (*.bmp *.dib);;GIF image (*.gif);;JPEG image (*.jfif *.jpe *.jpeg *.jpg);;PNG image (*.png);;TIFF Image (*.tif *.tiff)");
     
        dialog.m_outputFilter = tr("PostScript file (*.eps)");
     
        dialog.exec();
        dialog.deleteLater();
        return dialog.m_IO;
    }
     
    void I2PS_SSC_D::accept()
    {
        m_IO.clear();
        m_IO.insert(m_inputLine->text(), m_outputLine->text());
        QDialog::accept();
    }
     
    void I2PS_SSC_D::reject()
    {
        m_IO.clear();
        QDialog::reject();
    }
     
    void I2PS_SSC_D::initControls()
    {
        int w(85), h(25);
     
        //Button: Cancel
        m_cancel->setText(tr("Cancel"));
        m_cancel->setGeometry(width() - w - 20, height() - h - 15, w, h);
        connect(m_cancel, SIGNAL(clicked()), this, SLOT(reject()));
     
        //Button: OK
        m_OK->setText(tr("OK"));
        m_OK->setGeometry(width() - (2 * w) - 35, height() - h - 15, w, h);
        connect(m_OK, SIGNAL(clicked()), this, SLOT(accept()));
    }
     
    void I2PS_SSC_D::initInput()
    {
        m_inputGroup->setGeometry(20, 15, 360, 75);
     
        m_inputFind->setIcon(this->style()->standardIcon(QStyle::SP_DirOpenIcon));
        m_inputLine->setReadOnly(true);
     
        m_inputLayout->addWidget(m_inputLine, 7);
        m_inputLayout->addWidget(m_inputFind, 1);
        m_inputGroup->setLayout(m_inputLayout);
     
        connect(m_inputFind, SIGNAL(clicked()), this, SLOT(inputFindClicked()));
        connect(m_inputLine, SIGNAL(textChanged(QString)), this,  SLOT(inputChanged()));
    }
     
    void I2PS_SSC_D::initOutput()
    {
        m_outputGroup->setGeometry(20, m_inputGroup->height() + 30, 360, 100);
     
        m_outputCheck->setText(tr("Set the same name as the input file"));
        m_outputFind->setIcon(this->style()->standardIcon(QStyle::SP_DirOpenIcon));
        m_outputLine->setReadOnly(true);
     
        m_outputSubLayout->addWidget(m_outputLine, 7);
        m_outputSubLayout->addWidget(m_outputFind, 1);
        m_outputLayout->addWidget(m_outputCheck);
        m_outputLayout->addLayout(m_outputSubLayout);
        m_outputGroup->setLayout(m_outputLayout);
     
        connect(m_outputCheck, SIGNAL(stateChanged(int)), this, SLOT(outputCheckClicked(int)));
        connect(m_outputFind, SIGNAL(clicked()), this, SLOT(outputFindClicked()));
    }
     
    void I2PS_SSC_D::inputChanged()
    {
        if(m_outputCheck->checkState() == Qt::Checked)
        {
            if(!m_inputLine->text().isEmpty())
            {
                QString str = m_inputLine->text();
                int i = str.lastIndexOf(".");
                str.truncate(i);
                str += QString(".eps");
                m_outputLine->setText(str);
            }
        }
    }
     
    void I2PS_SSC_D::inputFindClicked()
    {
        QString str = QFileDialog::getOpenFileName(this, tr("Set input file"), m_dir, m_inputFilter);
        m_inputLine->setText(str);
    }
     
    void I2PS_SSC_D::outputCheckClicked(int state)
    {
        if(state == Qt::Unchecked)
        {
            m_outputFind->setEnabled(true);
            m_outputLine->setEnabled(true);
        }
        else if(state == Qt::Checked)
        {
            m_outputFind->setEnabled(false);
            m_outputLine->setEnabled(false);
            if(!m_inputLine->text().isEmpty())
            {
                QString str = m_inputLine->text();
                int i = str.lastIndexOf(".");
                str.truncate(i);
                str += QString(".eps");
                m_outputLine->setText(str);
            }
        }
    }
     
    void I2PS_SSC_D::outputFindClicked()
    {
        QString str = QFileDialog::getSaveFileName(this, tr("Set output file"), m_dir, m_outputFilter);
        m_outputLine->setText(str);
    }
    La méthode statique publique est QMap<QString,QString> I2PS_SSC_D::getIOFiles(QWidget* parent, const QString& title, const QString& dir, const QString& filter); son prototype se trouve à la ligne 31 du fichier d'en-tête et elle est définie à partir de la ligne 53 du fichier i2ps_ssc_d.cpp.

    Merci d'avance pour votre (extrême?) patience.

    PS: Pour la peine je retire momentanément la pastille .
    De retour, plus sportif mais toujours aussi moche.
    _____________
    Pro: Programmation en C/C++ (embarqué ou non)
    Loisir: Programmation en C++11/14/17 avec la STL ou Qt 5

Discussions similaires

  1. Appel d'une méthode sur une classe avec héritage
    Par SasakiKojiro dans le forum Général Java
    Réponses: 13
    Dernier message: 17/04/2015, 18h56
  2. Problème pour utiliser la méthode d'une classe
    Par Freddrick dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 09/09/2012, 18h43
  3. [AJAX] Appeler méthode d'une classe avec Ajax
    Par anto2b dans le forum AJAX
    Réponses: 1
    Dernier message: 02/02/2012, 13h47
  4. Réponses: 14
    Dernier message: 08/04/2008, 16h42
  5. Réponses: 5
    Dernier message: 26/05/2005, 15h40

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