Bonjour ou bonsoir,
je suis un tutoriel sur le langage C++. En lisant le cours sur la traduction d'applications, j'ai essayé de l'adapté au 1er TP que j'avais fais. Il consiste grosso-modo à produire une fenêtre modale à partir des renseignements fournies à une première fenêtre. Quand je lance l'appli, donc ma 1ère fenêtre, la traduction marche, mais quand je génère la seconde fenêtre, il n'y a pas de traduction.
Voici le code source de mes classes
Fenêtre principale
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 | #include "FenPrincipale.h" FenetrePrincipale::FenetrePrincipale() : QWidget() { //titre de la fenêtre setWindowTitle(tr("Générateur de code de fichier d'entête")); //icône de la fenêtre setWindowIcon(QIcon("icone.png")); //création du layout principal layoutPrincipal = new QVBoxLayout(this); //création du 1er groupbox (définition de la classe) et de ses éléments definitionClasse = new QGroupBox(tr("Définition de la classe")); form1 = new QFormLayout(); nom = new QLineEdit(); classeMere = new QLineEdit(); //association des éléments au formulaire form1->addRow(tr("&Nom"), nom); form1->addRow(tr("Classe &mère"), classeMere); //association du groupbox au layout formulaire definitionClasse->setLayout(form1); //création du second groupbox (options pour header, constructeur,..) et de ses éléments options = new QGroupBox(tr("Options")); layoutOptions = new QVBoxLayout(); header = new QCheckBox(tr("Protéger le &header contre les intrusions multiples")); //par défaut on protège l'utilisateur des inclusions multiples header->setChecked(true); constructeur = new QCheckBox(tr("Générer le &constructeur par défaut")); destructeur = new QCheckBox(tr("Générer un &destructeur")); //ajout des éléments au layout vertical layoutOptions->addWidget(header); layoutOptions->addWidget(constructeur); layoutOptions->addWidget(destructeur); //association du groupbox au layout vertical options->setLayout(layoutOptions); //création du 3e groupbox sur les commentaires et de ses éléments commentaires = new QGroupBox(tr("Ajouter des commentaires")); commentaires->setCheckable(true); form2 = new QFormLayout(); auteur = new QLineEdit(); dateCreation = new QDateEdit(QDate::currentDate()); roleClasse = new QTextEdit(); //ajout des éléments au formulaire form2->addRow(tr("&Auteur"), auteur); form2->addRow(tr("Da&te de création"), dateCreation); form2->addRow(tr("&Rôle de la classe"), roleClasse); //association du groupbox au formulaire commentaires->setLayout(form2); //dernier compartiment de la fenêtre constituée d'une box de boutons générer et quitter layoutBouton = new QHBoxLayout(); layoutBouton->setAlignment(Qt::AlignRight); //alignement de la droite vers la gauche generer = new QPushButton(tr("Générer")); quitter = new QPushButton(tr("Quitter")); //ajout des boutons à la grille layoutBouton->addWidget(generer); layoutBouton->addWidget(quitter); //assciation des groupbox et grille au layout principal layoutPrincipal->addWidget(definitionClasse); layoutPrincipal->addWidget(options); layoutPrincipal->addWidget(commentaires); layoutPrincipal->addLayout(layoutBouton); //gestion du bouton quitter connect(quitter, SIGNAL(clicked()), qApp, SLOT(quit())); //gestion de la fenetre générée connect(generer, SIGNAL(clicked()), this, SLOT(ouvrirCodeGenere())); } void FenetrePrincipale::ouvrirCodeGenere() { /*on vide la chaine au début pour éviter que si l'on regénère le code, le nouveau code s'ajoute sur l'ancien il faut d'abord supprimer l'ancien code généré s'il y en avait un */ chaine.clear(); //si le nom de la classe n'est pas inscrit, ça ne sert à rien de continuer, c'est l'élément indispensable if(nom->text() == "") { QMessageBox::warning(this,tr("Attention"),tr("Il faut impérativement renseigner le nom de la classe")); return; } //on précise ou pas le nom de la classe mère if(classeMere->text() != "") { chaine += "class " + nom->text() + " : public " + classeMere->text() + "\n"; } else { chaine += "class " + nom->text() + "\n"; } //on commence le formatage du squelette de la classe chaine += "{\n"; chaine += " public:\n"; /*on ajoute des constantes de préprocesseur à la demande de l'utilisateur pour éviter des inclusions * infinies de l'entête */ if(header->isChecked()) { chaine.prepend("#ifndef HEADER_" + nom->text().toUpper() + "\ndefine HEADER_" + nom->text().toUpper() + "\n\n"); } //on ajoute un constructuer par défaut si l'utilisateur le demande if(constructeur->isChecked()) { chaine += " " + nom->text() + "();\n"; } //on ajoute un destructeur si l'utilisateur le demande; if(destructeur->isChecked()) { chaine += " ~" + nom->text() + "();\n"; } //on termine le formatage du squelette de la classe chaine += "\n protected:\n\n"; chaine += " private:\n\n"; chaine += "};\n\n"; if(header->isChecked()) //on rajoute une dernière commande de préprocesseur pour compléter les premières chaine += "#endif"; //on ajoute des commentaires sur la classe à la demande de l'utilisateur if(commentaires->isChecked()) { //on forme la chaîne des commentaires chaine.prepend("/* \nAuteur: " + auteur->text() + "\n" + "Date de création : " + dateCreation->date().toString() + "\n\n" + "Rôle:\n" + roleClasse->toPlainText() + "\n*/\n\n\n"); } //on génère la fenêtre qui contient le code fabriqué fenetre = new FenetreGeneree(this, chaine); fenetre->exec(); } |
la fenêtre générée
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 | #include <QApplication> #include "FenCodeGenere.h" FenetreGeneree::FenetreGeneree(QWidget *parent, QString const& code) : QDialog(parent) { //on choisit la taille de la fenêtre resize(380, 520); //on choisit le nom de la fenêtre setWindowTitle(tr("Code généré")); //création du layout vertical layout = new QVBoxLayout(this); //création du champ de texte qui contiendra le code généré texte = new QTextEdit(); //on charge le code recupéré dans le constructeur texte->setText(code); //on change la police texte->setFont(QFont("Courier")); //on passe le texte en mode lecture seule texte->setReadOnly(true); //on évite que le code soit "coupé" si on diminue la fenêtre texte->setLineWrapMode(QTextEdit::NoWrap); //création du bouton fermer fermer = new QPushButton(tr("fermer")); //association des éléments au layout layout->addWidget(texte); layout->addWidget(fermer); //gestion du bouton fermer connect(fermer, SIGNAL(clicked()), this, SLOT(close())); } |
le main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <QApplication> #include <QTranslator> #include "FenPrincipale.h" #include "FenCodeGenere.h" int main(int argc, char* argv[]) { QApplication app(argc, argv); //QString locale = QLocale::system().name().section('_', 0, 0); QTranslator translator; translator.load(QString("zeroclassgenerator_") + QString("en")); app.installTranslator(&translator); FenetrePrincipale fenetre; fenetre.show(); return app.exec(); } |
Je vous remercie d'avance pour vos explications
+0
-0