Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C++ > [Qt] slots QLineEdit > Lecture du sujet

[Qt] slots QLineEdit

Amélioration tuto classGenerator M@teo

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne Spoonik # Posté le 04/07/2008 à 09:47:49
42
Avatar
Groupe : Membres
Bonjour,

Je viens de finir de faire le tuto sur le générateur de classe, non sans mal mais c'est comme ça qu'on apprend.
J'ai cependant un souci quand aux améliorations à apporter. En l'occurrence la première à savoir l'affichage (en temps réel ou pas d'ailleurs) du HeaderGuard qui sera généré.

J'ai réussi à afficher ce que je saisi, en temps réel ou lorsque je quitte la ligne de saisie (avec l'un ou l'autre SIGNAL adéquat), dans un autre QLineEdit :
Code : C++
1
connect(nom, SIGNAL(textChanged(QString)), header, SLOT(setText(QString)));

nom est le champ de saisi de ma classe et header celui d'arrivé, tout deux de type QLineEdit

Mon problème est que je souhaiterais afficher un texte comportant le nom de la classe, à savoir "HEADER_<nom_de_la_classe>" (sans les ").
Mon problème est donc que je n'arrive pas à faire de texte "customisé".


Je pense que la solution est de faire un slot personnalisé. J'ai essayé et ... j'y arrive pas ^^
Voici un exemple de ce que j'ai essayé de faire (parmis moult tentative ... qui ne fonctionne pas :p ) :
Code : C++
1
2
3
4
void FenPrincipale::genererHeader(const QString &nomClasse)
{
    header->setText("bidule" + nomClasse);
}

J'avoue que j'ai des doutes sur la déclaration de mon slot, ensuite j'ai des doutes quand à l'exploitation de la variable.

Merci d'avance de votre aide !!

Utilisateur C++ (avec Code::Blocks)
Progression tuto C++ : [Qt]Amélioration ZeroClasseGenerator
Problème(s) actuel : <aucun pour l'instant ... je touche du bois>
 
Hors ligne BoudBoulMan # Posté le 04/07/2008 à 10:49:47
Saucisse transgénique
Avatar
Groupe : Membres
Moi je pense que le slot perso est la solution en effet.

Montre-nous ta classe FenPrincipale, tu dois sans doute commettre une erreur dans les règles pour définir un nouveau slot.

Après, le ("bidule" + nomClasse) me parait bizarre quand même, ton compilo te dit rien le concernant?
Je crois que ce serait plutôt
Code : C++
1
QString("bidule")+nomClasse
Édité le 04/07/2008 à 10:53:16 par BoudBoulMan
Hors ligne Spoonik # Posté le 04/07/2008 à 11:08:56
42
Avatar
Groupe : Membres
Alors voici les codes du programme (je vous fait grâce du main).
FenPrincipale.cpp
Code : C++
  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
#include <FenPrincipale.h>
#include <FenCodeGenere.h>

FenPrincipale::FenPrincipale()
{
    //Groupe : Définition de la classe
    nom = new QLineEdit;
    classeMere = new QLineEdit;

    QFormLayout *definitionLayout = new QFormLayout;
    definitionLayout->addRow("Nom :", nom);
    definitionLayout->addRow("Classe mère :", classeMere);

    QGroupBox *groupDefinition = new QGroupBox("Definition de la classe");
    groupDefinition->setLayout(definitionLayout);

    //Groupe : Options de la classe
    protections = new QCheckBox("Protéger le header contre les inclusions multiples");
    protections->setChecked(true);
    header = new QLineEdit;
    genererConstructeur = new QCheckBox("Générer un constructeur par défaut");
    genererDestructeur = new QCheckBox("Générer un destructeur par défaut");

    QVBoxLayout *optionsLayout = new QVBoxLayout;
    optionsLayout->addWidget(protections);
    optionsLayout->addWidget(header);
    optionsLayout->addWidget(genererConstructeur);
    optionsLayout->addWidget(genererDestructeur);

    QGroupBox *groupOptions = new QGroupBox("Options");
    groupOptions->setLayout(optionsLayout);

    //Groupe : Ajouter des commentaires
    auteur = new QLineEdit;
    date = new QDateEdit;
    date->setDate(QDate::currentDate());
    role = new QTextEdit;

    QFormLayout *commentairesLayout = new QFormLayout;
    commentairesLayout->addRow("Auteur :", auteur);
    commentairesLayout->addRow("Date de création :", date);
    commentairesLayout->addRow("Rôle de la classe :", role);

    groupCommentaires = new QGroupBox("Ajouter des commentaires");
    groupCommentaires->setCheckable(true);
    groupCommentaires->setChecked(false);
    groupCommentaires->setLayout(commentairesLayout);

    //Layout : boutons du bas
    generer = new QPushButton("Générer !");
    quitter = new QPushButton("Quitter");

    QHBoxLayout *boutonsLayout = new QHBoxLayout;
    boutonsLayout->setAlignment(Qt::AlignRight);
    boutonsLayout->addWidget(generer);
    boutonsLayout->addWidget(quitter);

    //Layout principal
    QVBoxLayout *layoutPrincipal = new QVBoxLayout;
    layoutPrincipal->addWidget(groupDefinition);
    layoutPrincipal->addWidget(groupOptions);
    layoutPrincipal->addWidget(groupCommentaires);
    layoutPrincipal->addLayout(boutonsLayout);

    setLayout(layoutPrincipal);
    setWindowTitle("Classe Generator");
    setWindowIcon(QIcon("icone.png"));
    resize(400, 450);

    //Connexion des signaux et slots
    connect(nom, SIGNAL(textChanged(QString)), header, SLOT(genererHeader(QString)));
    connect(quitter, SIGNAL(clicked()), qApp, SLOT(quit()));
    connect(generer, SIGNAL(clicked()), this, SLOT(genererCode()));
}

void FenPrincipale::genererCode()
{
    //Si le nom de la classe est vide , on ne fait rien
    if (nom->text().isEmpty())
    {
        QMessageBox::critical(this, "Erreur", "Veuillez entrer au moins un nom de classe");
        return;
    }

    //Si c'est bon, on génère le code
    QString code;

    if (groupCommentaires->isChecked()) //On met des commentaires
    {
        code += "/*\nAuteur : " + auteur->text() + "\n";
        code += "Date de création : " + date->date().toString() + "\n\n";
        code += "Rôle : " + role->toPlainText() + "\n*/\n\n";
    }

    if (protections->isChecked()) //Si on inclus le header de protection
    {
        code += "#ifndef HEADER_" + nom->text().toUpper() + "\n";
        code += "#define HEADER_" + nom->text().toUpper() + "\n\n";
    }

    code += "class " + nom->text();

    if (!classeMere->text().isEmpty())
    {
        code += " : public " + classeMere->text();
    }

    code += "\n{\n   public:\n";
    if (genererConstructeur->isChecked())
    {
        code += "       " + nom->text() + "();\n";
    }
    if (genererDestructeur->isChecked())
    {
        code += "       ~" + nom->text() + "();\n";
    }
    code += "\n\n   protected:\n";
    code += "\n\n   private:\n";
    code += "};\n\n";

    if (protections->isChecked())
    {
        code += "#endif\n";
    }

    //On créé et on affiche la fenêtre qui affichera le code généré envoyé en paramètre
    FenCodeGenere *fenetreCode = new FenCodeGenere(code, this);
    fenetreCode->exec();
}

void FenPrincipale::genererHeader(const QString &nomClasse)
{
    header->setText("bidule" + nomClasse);
}

FenPrincipale.h
Code : C++
 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
#ifndef HEADER_FENPRINCIPALE
#define HEADER_FENPRINCIPALE

#include <QtGui>

class FenPrincipale : public QWidget
{
    Q_OBJECT

	public:
		FenPrincipale();

	private slots:
        void genererCode();
        void genererHeader(const QString &nomClasse);

	private:
        QLineEdit *nom;
        QLineEdit *classeMere;
        QCheckBox *protections;
        QLineEdit *header;
        QCheckBox *genererConstructeur;
        QCheckBox *genererDestructeur;
        QGroupBox *groupCommentaires;
        QLineEdit *auteur;
        QDateEdit *date;
        QTextEdit *role;
        QPushButton *generer;
        QPushButton *quitter;

};


#endif


Ça compile sans problème.
A noter que j'ai testé ta proposition et ça ne fonctionne pas non plus (mais il fallait essayer).

Utilisateur C++ (avec Code::Blocks)
Progression tuto C++ : [Qt]Amélioration ZeroClasseGenerator
Problème(s) actuel : <aucun pour l'instant ... je touche du bois>
 
Hors ligne BoudBoulMan # Posté le 04/07/2008 à 11:12:48
Saucisse transgénique
Avatar
Groupe : Membres
Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Code : C++
1
connect(nom, SIGNAL(textChanged(QString)), header, SLOT(genererHeader(QString)));

devrait être remplacé par
Code : C++
1
connect(nom, SIGNAL(textChanged(QString)), this, SLOT(genererHeader(QString)));
Édité le 04/07/2008 à 11:13:49 par BoudBoulMan
Hors ligne Spoonik # Posté le 04/07/2008 à 11:38:48
42
Avatar
Groupe : Membres
En voyant ta réponse j'ai fait "Mais c'est bien sur !!!!"

En effet c'est bien cela, j'ai compris mon erreur.
Puisque dans mon slot je modifie header, je dois appeler la fenêtre qui elle par la suite gère le tout ... enfin en gros j'ai compris pourquoi je m'étais planté ^^

Merci BoudBoulMan !!

Utilisateur C++ (avec Code::Blocks)
Progression tuto C++ : [Qt]Amélioration ZeroClasseGenerator
Problème(s) actuel : <aucun pour l'instant ... je touche du bois>
 
Hors ligne BoudBoulMan # Posté le 04/07/2008 à 11:54:19
Saucisse transgénique
Avatar
Groupe : Membres
C'est surtout parce que le slot n'est pas défini dans les QLineEdit mais dans ta classe FenPrincipale.

Retour au forum "Langage C++" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 115 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.0359s (0.0203s)