Logiciel Pastèque/Misc/Histoire
Programmation Qt/La fenêtre principale
La fenêtre principale permet l'utilisation de nombreux outils. Pour cela, on utilisera la classe codice_1.
Utiliser les outils de la fenêtre principale.
Connaître les différents outils.
Pour connaître les différents outils, quelque chose de simple :
Les menus.
Pour notre chapitre, nous irons de haut en bas, et c'est bien pour cela que nous commençons avec les menus. C'est le plus utilisé (si on ne compte pas la zone centrale), et la grande majorité des programmes en ont. Pour commencer, nous allons étudier un code :
QMenu *menuFichier = menuBar()->addMenu("Fichier", this);
Première ligne de code, premier changement ! Eh bien oui, c'est la méthode codice_2 de codice_3 que nous allons appeler. À noter : nous sommes dans une classe qui dérive de codice_1, si vous regardez bien. Si votre code n'est que dans un seul fichier (trèèès mauvais), vous devrez écrire codice_5.
Ajouter une action.
C'est bien beau, mais, si vous compilez, et que vous cliquez sur votre menu, rien ne s'ouvre ! Qt ne sait absolument pas que le menu Fichier contiendra une action Nouveau, et c'est ce que nous allons faire :
QAction *actionNouveauFichier = new QAction("Nouveau fichier");
menuFichier->addAction(actionNouveauFichier);
Il faudra penser à rajouter des actions. Autre chose, il y a juste marqué Nouveau fichier. C'est banal ! Arrangeons ça !
actionNouveauFichier->setIcon(QIcon("nouveau-fichier.png"));
actionNouveauFichier->setShortcut(QKeySequence("Ctrl+N"));
Et si notre action est Gras, on peut faire ceci :
QAction *actionGras = new QAction("Gras");
actionGras->setIcon(QIcon("gras.png"));
actionGras->setCheckable(true);
menuEdition->addAction(actionGras);
Créer des sous-menus.
Si la personne a par exemple la liste des fichiers récents, il faut procéder comme ceci :
QMenu *menuFichier = menuBar()->addMenu("Fichier", this);
QMenu *menuFichiersRecents = new QMenu("Fichiers récents");
QAction *actionFichierPro = new QAction("Un certain fichier *.pro");
QAction *actionFichierH = new QAction("Un certain fichier *.h");
QAction *actionFichierCpp = new QAction("Un certain fichier *.cpp");
menuFichiersRecents->addAction(actionFichierPro);
menuFichiersRecents->addAction(actionFichierH);
menuFichiersRecents->addAction(actionFichierCpp);
menuFichier->addMenu(menuFichiersRecents);
Cette fois-ci, on utilise la méthode codice_2.
La barre d'outils.
Pour afficher des actions dont l'utilisateur aura le plus besoin, on utilise la barre d'outils qui nous permet de ne pas passer par les menus. Et ce qui est très pratique, c'est que nous pouvons réutiliser toutes les actions du menu !
QToolBar *barreDoutilsFichier = addToolBar("Fichier");
QAction *actionQuitter = new QAction("Fermer la fenêtre");
barreDoutilsFichier->addAction(actionQuitter);
Les docks.
Le principe des docks est assez simple : la classe codice_7 contient nos widgets, et on les ajoute à la codice_1 :
QDockWidget *dock = new QDockWidget(tr("Dock Widget"), this);
QPushButton *button = new QPushButton(tr("Button in a Dock Widget"));
dock->setWidget(button);
addDockWidget(Qt::LeftDockWidgetArea, dock);
On vient donc d'insérer un dock qui sera placé à gauche de la fenêtre. Pour ajouter plusieurs widgets dans un même dock, on peut utiliser un layout puis la méthode codice_9 de la classe codice_7. Bien évidemment, l'utilisateur pour en faire une fenêtre à par entière qu'il pourra ensuite remettre autant à gauche qu'à droite.
L'espace principal.
Pour l'espace principal, il y a deux choix : un SDI, c'est-à-dire une seule fenêtre dans la fenêtre, ou un MDI, c'est-à-dire plusieurs fenêtres qui vont se glisser dans le cadre principal.
SDI.
Pour créer un SDI ("Single Document Interface"), c'est très simple. Vous créez un widget conteneur (souvent un codice_11), puis vous utilisez la méthode codice_12, qui accepte votre conteneur.
MDI.
Pour l'espace MDI ("Multiple Document Interface"), c'est un peu différent. Voici un exemple :
QMdiArea *zoneMDI = new QMdiArea();
QPushButton *button = new QPushButton();
QDateEdit *dateEdit = new QDateEdit();
QMdiSubWindow *mdiSubWindow1 = zoneMDI->addSubWindow(button);
QMdiSubWindow *mdiSubWindow2 = zoneMDI->addSubWindow(dateEdit);
setCentralWidget(zoneMDI);
Effectivement, nous utilisons le principe du SDI car on remarque codice_12. Pour notre MDI, la fenêtre n'a pas ses “propres” outils pour en créer, mais on utilise la classe codice_14 qui contiendra des codice_15, qu'on ajoute avec la méthode codice_16 d'une codice_14. Ces codice_15 contiendront les widgets de la sous-fenêtre.
La barre d'état.
Aussi appelée barre de statut, la barre d'état est un “bandeau” en bas de la fenêtre qui indique l'état de la fenêtre. Regardez l'exemple ci-dessous :
statusBar()->showMessage(tr("Bienvenue !"), 2000);
QProgressBar *progressBar = new QProgressBar();
progressBar->setValue(75);
statusBar()->addWidget(progressBar, 16);
Ici, nous supposons que nous sommes dans une classe de type codice_1, qui intègre directement la classe qui permet de créer une barre d'état : codice_20. Nous utilisons le plus souvent ces méthodes : codice_21 et codice_22. La première méthode permet d'afficher un message, avec deux choix : soit nous indiquons directement le message, qui s'affichera alors jusqu'à ce que l'utilisateur passe dessus avec la souris ou qu'un autre message s'affiche, soit nous indiquons et le message et le temps qu'il doit rester, en millisecondes (vous prenez le nombre de secondes et vous multipliez par 1000). La deuxième méthode permet d'insérer un widget dans la barre d'état, ici une barre de progression, mais cela peut être un bouton, un champ, etc.
Vous êtes maintenant prêt à réaliser un TP qui utilise plus que jamais les éléments de la fenêtre principale. Eh oui, c'est un éditeur de texte que vous allez réaliser dans .

Programmation Qt/Traduire son programme
Il peut arriver que vous distribuez votre programme à un ami. Imaginons qu'il soit anglais. Même s'il parle français, il préférerait avoir le programme en anglais. C"est pour cela qu'on peut traduire le programme. Tout d'abord, configurons le codice_1.
Configurer le projet.
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = monprojet
TEMPLATE = app
SOURCES += main.cpp\
 mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
Pour l'instant, vous avez ceci. Maintenant, rajoutez la ligne :
TRANSLATIONS += monprojet_fr.ts monprojet_en.ts
Voilà, votre fichier codice_2 est configuré. Rendez-vous maintenant dans vos fichiers codice_3. Ajoutez autour de vos chaînes de caractères codice_4. Cette fois-ci, c'est dans la console (Ctrl + Alt + T sous GNU/Linux, codice_5 > codice_6 sous Windows) que nous avons rendez-vous. Entrez la ligne suivante :
lupdate monprojet.pro
Vous pouvez maintenant voir des fichiers codice_7 générés.
Les fichiers codice_7 et codice_9.
Quand vous avez installé Qt, un programme nommé Qt Linguist a aussi été installé. Allez-y.
Ouvrez les fichiers en question, puis rentrez dans les champs codice_10, par exemple, le texte traduit. Fermez ensuite le programme, et ouvrez la console :
lrelease monprojet_fr.ts monprojet_en.ts
Cela créé des fichiers codice_9. Mettez-les maintenant dans le dossier de l'exécutable. Ouvrez le fichier codice_12 et entrez :
QTranslator translator;
translator.load("monprojet_en");
app.installTranslator(&translator);
Lancez maintenant le programme. Le programme est traduit en anglais ! Bien évidemment, cela marche pour le chinois, l'arabe, l'italien...