IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
FAQ Qt FAQ Qt Creator FAQ PyQt & PySide

FAQ Qt

FAQ QtConsultez toutes les FAQ

Nombre d'auteurs : 26, nombre de questions : 298, dernière mise à jour : 15 juin 2021 

 
OuvrirSommaireModulesQt GUI et Qt WidgetsSystèmes d'affichageQWidget et layouts

La façon la plus simple est d'utiliser un QLabel et ses possibilités de Rich text. Pour cela il suffit :

  • d'autoriser l'ouverture vers une page Web ;
  • d'attribuer au texte du label une portion de code contenant le lien HTML : <a href='site référencé'>XXXXX</a>, où XXX peut être :
    • une phrase simple,
    • une phrase en HTML : <font size='S' family='...' color='C'> ... </font>, avec :
      • size : taille de la police (facultatif),
      • family : police à utiliser, dans l'ordre de préférence (facultatif),
      • color : couleur du texte,
      • il est possible de compléter la phrase en utilisant les balises de formatage de texte comme gras (<b>...<\b>), italique (<i>...</i>)… ;
    • une image en HTML : <img src='MON_IMAGE' height='H' width='W'>, avec :
      • src : path de l'image à afficher (peut se situer dans les ressources),
      • height : hauteur de l'image (facultatif),
      • width : largeur de l'image (facultatif).
Exemple avec un lien text et un lien image
Cacher/Afficher le codeSélectionnez
Mis à jour le 7 mai 2012  par Yan Verdavaine

Qt propose la classe QSplashScreen pour simplifier la gestion des écrans de démarrage. Un écran de démarrage est une image affichée lors du démarrage d'un programme, pour faire patienter l'utilisateur durant le démarrage lent de l'application et/ou par intérêt commercial, informatif ou esthétique.

Remarque :

 
Cacher/Afficher le codeSélectionnez
Mis à jour le 7 mai 2012  par Shugo78

Qt fournit un mécanisme de gestion de la validation et de vérification des entrées utilisateur dans une zone d'édition. La classe de base est la classe QValidator, dont dérivent les classes QDoubleValidator, QIntValidator, et QRegExpValidator. L'utilisation de ces classes est très simple, au moins pour les deux premières.

Voici un exemple d'utilisation. On veut limiter l'entrée dans une zone d'édition aux seuls nombres entiers compris entre 0 et 100.

 
Sélectionnez
// On définit un objet de type QIntValidator acceptant uniquement des nombre entiers entre 0 et 100
QIntValidator* validator =  new QIntValidator (0, 100, this);
// Création d'une zone d'édition : ici une QLineEdit
QLineEdit *edit= new QLineEdit(this);
// On applique l'objet QIntValidator à la zone d'édition
edit->setValidator(validator);

Le même principe est utilisable pour contrôler par exemple une valeur double avec QDoubleValidator. Si l'on souhaite un motif spécifique par exemple une adresse IP, un numéro de téléphone ou autre, il faut utiliser la classe QRegExpValidator ou créer soi-même un validateur à partir d'une classe dérivant de QValidator.

Mis à jour le 7 mai 2012  par François Jaffré

Les curseurs sont très utilisés dans les classes pouvant les accueillir (comme l'autorisent par défaut QTextEdit, QTextBrowser et d'autres classes encore).

Pour retrouver la sélection courante qu'a faite l'utilisateur d'un programme, il suffit d'utiliser la fonction selectedText() de la manière qui suit :

 
Sélectionnez
// QString QTextCursor::selectedText () const
widget->textCursor().selectedText();

Note : cette fonction, retournant un QString, peut parfaitement être vide (empty, en anglais).

Il est de même possible de supprimer la sélection courante à l'aide de removeSelectedText() :

 
Sélectionnez
// void QTextCursor::removeSelectedText ()
widget->textCursor().removeSelectedText();

Note : la suppression ne se produira que si du texte a effectivement été sélectionné.

L'insertion de texte avec l'assistance des curseurs s'effectue avec insertText() qui entre du texte à partir de la position du curseur.

 
Sélectionnez
// void QTextCursor::insertText ( const QString & text, const QTextCharFormat & format )
widget->textCursor().insertText("Chaîne de type QString");

Voici un exemple, reprenant ce qui est inscrit ci-dessus, permettant d'effectuer une modification sur un texte sélectionné sans pour autant modifier plusieurs chaînes identiques :

 
Sélectionnez
 // ...
zoneTexte = new QTextEdit(this);
connect(zoneTexte, SIGNAL(selectionChanged()), this, SLOT(transformer()));
// ...

void XXXXXXXX::transformer()
{
    // On garde en mémoire le texte sélectionné
    QString selectionTexte(zoneTexte->textCursor().selectedText());
    // On supprime celui-ci sans pour autant supprimer les chaînes identiques
    zoneTexte->textCursor().removeSelectedText();
    // Et on effectue l'opération voulue au départ
    zoneTexte->textCursor().insertText("<italique>" + selectionTexte + "</italique>");
}
Mis à jour le 7 mai 2012  par Louis du Verdier
Pour cela, la classe QCursor fournit deux fonctions statiques :
 
Cacher/Afficher le codeSélectionnez
Mis à jour le 7 mai 2012  par Yan Verdavaine

Il peut parfois être nécessaire de vouloir récupérer l'identifiant système d'une fenêtre ou d'un widget, notamment si l'on souhaite utiliser Qt avec les API spécifiques à chaque système. Pour cela, Qt fournit la méthode WId QWidget::winId () const.

Exemple d'utilisation pour Windows
Sélectionnez
#include <windows.h>
//...
HWND hwnd = monWidget->winId();
Exemple d'utilisation pour Linux
Sélectionnez
#include <X11/X.h>
//...
Window window = reinterpret_cast<Window>(monWidget->winId());
Exemple d'utilisation pour Mac OS X (Carbon - 32 bits)
Sélectionnez
#include <Carbon/Carbon.h>
//...
HIViewRef view = reinterpret_cast<HIViewRef>(monWidget->winId());
Exemple d'utilisation pour Mac OS X (Cocoa - 64 bits)
Sélectionnez
#include <Cocoa/Cocoa.h>
//...
NSView *view = reinterpret_cast<NSView*>(monWidget->winId());
Mis à jour le 2 janvier 2010  par François Jaffré

La zone MDI est une sorte d'émulation d'un bureau qui va permettre d'afficher un ou plusieurs widgets avec une décoration. Lors de l'ajout d'un widget, son affichage n'est pas automatique.

On peut constater deux cas :
  • l'ajout après construction : si les widgets sont ajoutés juste après la construction du QMDIArea, ils seront automatiquement affichés ;
  • l'ajout dynamique : un widget ajouté à un QMDIArea possède les mêmes propriétés qu'un widget sans parent et doit donc être explicitement affiché par show() ou équivalent.
 
Cacher/Afficher le codeSélectionnez
Mis à jour le 7 mai 2012  par Yan Verdavaine

Qt fournit avec la classe QTabWidget un moyen très simple pour créer et gérer les onglets. Celle-ci permet d'empiler sous la forme d'onglets les QWidget les uns sur les autres à l'aide de la fonction addTab().

Un petit exemple ci-dessous :

 
Cacher/Afficher le codeSélectionnez

Lorsque le nombre d'onglets est important, la barre d'onglets reste sur une seule ligne et des flèches de navigation apparaissent. Il n'est pas possible, à l'aide du framework Qt, d'avoir une barre d'onglets sur plusieurs lignes. Avoir un nombre important d'onglets est considéré comme un choix d'interface graphique à éviter par les développeurs de Qt.

Créé le 7 mai 2012  par François Jaffré, Pierre-Nicolas Rigal

Qt fournit la classe QProgressDialog, qui sert justement à afficher une fenêtre agrémentée d'une barre de progression.

Commençons par en créer une simple.

 
Sélectionnez
QProgressDialog progress("Copying files...", "Abort Copy", 0, numFiles, this);

Cet exemple tiré de la documentation prend cinq paramètres.

  1. Le premier est le texte qui sera affiché près de la barre pour rappeler à l'utilisateur quelle opération est en cours ;
  2. Le second est le texte du bouton Annuler ;
  3. Les troisième et quatrième arguments sont les bornes minimale et maximale, respectivement, de la barre de progression ;
  4. Le cinquième est le parent de la boîte de dialogue, comme d'habitude.

Le concept des bornes est expliqué dans le détail ci-dessous.

Premièrement, vous pouvez utiliser le slot setValue(int) pour définir l'avancement de la tâche, tandis que value() permet de lire cette valeur. Comme il s'agit d'un slot, vous pouvez l'utiliser dans le cadre du système de slots et de signaux de Qt, mais aussi comme une fonction basique du C++.

L'avancement de la tâche doit être compris entre les bornes inférieure (minimum) et supérieure (maximum). Elle est typiquement initialisée à zéro et incrémentée lorsqu'une tâche est effectuée, de manière à atteindre le maximum (le nombre de tâches) lorsque toutes les tâches sont accomplies. Par exemple, si vous avez 15 tâches à effectuer, vous mettrez le maximum à 15, et chaque tâche incrémentera la valeur de la barre de progression.

Un exemple pour le téléchargement d'un fichier :

 
Sélectionnez
QNetworkAccessManager * manager = new QNetworkAccessManager;
QNetworkReply * reply = manager->get(QNetworkRequest(QUrl("http://jcourtois.fr/uploads/cv/CV_Jonathan_Courtois_fr.pdf")));
QProgressDialog * progress = new QProgressDialog("Téléchargement...", "Annuler", 0, 0, parent);

connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(requestDownloadProgress(qint64, qint64)));
connect(reply, SIGNAL(finished()), this, SLOT(requestFinished()));
connect(progress, SIGNAL(canceled()), this, SLOT(requestCanceled()));

// Les slots de réception

void requestDownloadProgress(qint64 bytesReceived, qint64 bytesTotal)
{
    if (progress->maximum() == 0)
        progress->setMaximum(bytesTotal);

    progress->setValue(bytesReceived);
}

void requestFinished()
{
    progress->setValue(progress->maximum());
}

void requestCanceled()
{
    reply->abort();
}
Créé le 7 mai 2012  par Thibaut Cuvelier, Jonathan Courtois

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006 - 2017 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.