Ceci s'applique à Qt Creator 2.4.1.
Tout d'abord, pour utiliser et déboguer votre bibliothèque, vous devez avoir un projet supérieur hiérarchique avec deux sous-projets : un pour la bibliothèque, et un pour une application qui l'utilise. De cette façon, Creator reconstruira tout ce qui a été modifié avant d'exécuter l'application. Ainsi, si vous modifiez les fichiers sources de la bibliothèque, celle-ci sera reconstruite automatiquement. ainsi que l'application sera reliée.
Je montrerai, étape par étape, comment créer les trois projets nécessaires (la bibliothèque, l'application et le projet principal), pour aboutir à une application et une bibliothèque minimales, constructibles et déboguables. Vous pouvez ajouter facilement d'autres sous-bibliothèques en suivant les mêmes étapes.
Création des projets
-
Créez un dossier pour vos projets.
-
Top Projet
File->New File or Project, Other Project, Subdirs Project, Choose
- Nommez le projet
top
et le placer dans le dossier que vous avez créé à l'étape 1.
- Cliquez sur "Done & Add Subproject".
-
Projet de bibliothèque - une nouvelle fenêtre de projet apparaît suite au clic de l'étape précédente.
Other Project, C++ Library, Choose
- Type : changer en Statically Linked Library.
- Nommez le projet
library
et le mettre dans le top
qui a été créé dans le dossier précédent précédente. Ce dossier devrait être déjà sélectionné par défaut pour vous.
- Cliquez dessus, sélectionnez le module QtCore à utiliser par le projet de bibliothèque, laissez tout le reste aux valeurs par défaut.
-
Projet d'application - cliquez à droite sur le top
dans le volet Projets (pas dans top.pro)
Qt Widget Project, Qt Gui Application, Choose
- Nommez le projet
app
et le mettre dans le top
qui a été créé à l'étape 2. Ce dossier devrait être déjà sélectionné par défaut pour vous.
- Cliquez dessus, laissez tout aux paramètres par défaut.
Vous devriez maintenant avoir un top
projet qui a app
y library
en tant que sous-projets. Appuyez sur C-B (Ctrl-B ou Command-B, selon votre plate-forme) pour le construire. La construction devrait se dérouler sans erreur.
Définition des dépendances
Liens avec la bibliothèque
En app
subproject n'utilise pas encore notre bibliothèque. Pour avoir le app
lien avec notre bibliothèque :
-
Cliquez à droite sur app
dans le volet Projets ( no sur app.pro), choisissez Add Library...
-
Choisissez Internal Library
, Continuer
-
En library
est le seul choix possible et est déjà sélectionné. Cliquez jusqu'à la fin.
En app
est désormais lié de manière statique au projet library
. Changez n'importe quel fichier dans le app
(un changement d'espace fera l'affaire) pour forcer une construction, puis appuyez sur C-B pour une construction. La construction devrait se dérouler correctement.
Ajout d'une dépendance de niveau supérieur sur la bibliothèque
En app
sera reconstruit si la bibliothèque est modifiée, mais il n'y a rien pour garantir que le système make construira d'abord le sous-projet de la bibliothèque, avant de commencer à construire l'application. De telles informations appartiennent au toplevel top.pro
dossier de projet.
Ouvrir top.pro
et ajoutez une ligne CONFIG += ordered
. Le fichier devrait ressembler à ceci :
TEMPLATE = subdirs
SUBDIRS += \
library \
app
CONFIG += ordered
Assurez-vous que les SUBDIRS sont correctement ordonnés : la bibliothèque vient en premier avant l'application. Si l'ordre est incorrect, vous pouvez mélanger les entrées dans l'ordre correct. La barre oblique inversée \
est un caractère de continuation de ligne. Il ne doit pas y avoir d'espace après \
¡!
Sauvegarder le fichier (C-S), cliquer avec le bouton droit de la souris sur l'icône de l'ordinateur. top
et sélectionnez Rebuild Project "top". La construction devrait se terminer sans erreur. Les avertissements sont acceptés.
Sélection de la construction
Dans le panneau inférieur gauche de Qt Creator, il y a un panneau avec un bouton de construction (un marteau), un bouton d'exécution (un triangle), un bouton de débogage (un triangle avec un bug), un sélecteur de construction (un portable avec top
le nom du projet au-dessus, et la configuration de construction élidée en dessous. Cliquez sur le sélecteur de build, et assurez-vous que vous sélectionnez le Build qui se termine par Debug
. Cette construction est configurée pour produire les symboles de débogage nécessaires pour l'exécuter sous le débogueur. Nous en aurons besoin plus tard.
Mise en œuvre de la bibliothèque
Nous allons maintenant ajouter du code à la classe Library qui a été créée pour nous par Qt Creator. Ouvrez la classe library.h
y library.cpp
fichiers. Le code ajouté est simplement une méthode statique dans la classe Library. Cette méthode sera utilisée dans l'application pour montrer que les deux pièces se sont en fait liées. Le contenu des deux fichiers est ci-dessous.
//library.h
#ifndef LIBRARY_H
#define LIBRARY_H
#include <QString>
class Library {
public:
Library();
static QString string();
};
#endif // LIBRARY_H
//library.cpp
#include "library.h"
Library::Library()
{}
QString Library::string()
{
return "I come from the library";
}
Appuyez sur C-B, le code devrait se reconstruire sans erreur.
Mise en œuvre de l'application
Utilisons maintenant l'API de la bibliothèque de notre app
. Ouvrez le mainwindow.cpp
y mainwindow.h
et modifier comme ci-dessous.
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QScopedPointer>
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QScopedPointer<Ui::MainWindow> const ui;
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include <QVBoxLayout>
#include <QLabel>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "library.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QVBoxLayout * layout = new QVBoxLayout();
QLabel * label = new QLabel(Library::string(), centralWidget());
layout->addWidget(label);
centralWidget()->setLayout(layout);
}
MainWindow::~MainWindow()
{}
Appuyez sur C-B, le projet devrait se construire correctement.
Nous pouvons alors définir un point d'arrêt dans le Library::string()
pour vérifier que non seulement le code est appelé, mais que le débogueur fonctionne dans tous les sous-projets. Dans library.cpp
cliquez dans la zone grise à gauche du numéro de ligne dans la fenêtre return "I come from the library";
ligne. Un cercle rouge avec un petit sablier apparaîtra à l'endroit où vous avez cliqué : cela signifie qu'un point d'arrêt en attente a été défini.
Appuyez ensuite sur C-Y pour lancer le projet dans le débogueur. Le seul sous-projet exécutable est l'application, et il sera automatiquement choisi comme projet de démarrage.
Le cercle du point d'arrêt finira par perdre son sablier à mesure que le débogueur lira les fichiers de symboles et trouvera l'emplacement de notre point d'arrêt. Peu après, le code s'arrêtera dans la méthode Library::string() -- elle est appelée par le constructeur de MainWindow. Appuyez sur C-Y pour continuer l'exécution de app
.
La fenêtre principale apparaît alors, avec I come from the library
texte visible à l'intérieur de celui-ci. Ce texte a été placé sur une étiquette qui a été ajoutée dans le constructeur de MainWindow.