Les modules graphiques et web
Objectifs
Qt offre encore de nombreuses fonctionnalités relatives à l’affichage de fichiers vectoriels, à la prise en charge du support de l’impression et à la navigation web. Nous vous proposons de les découvrir succinctement dans ce chapitre.
Qt Svg
Le module Qt Svg offre le support complet du SVG, le format des graphismes vectoriels portable. Grâce à ce module il est possible de lire, interpréter et afficher le contenu d’un fichier SVG, mais aussi d’exporter tout ou partie de votre interface graphique dans un fichier SVG.
1. Intégration
Le module Qt Svg est intégré à votre projet grâce à l’ajout du mot-clé svg dans la déclaration QT de votre fichier .pro.
QT += svg
2. Rendu et affichage
Qt propose deux classes pour la gestion des fichiers SVG : QSvgRenderer pour l’interprétation du fichier et son rendu, et QSvgWidget pour son affichage. Cette dernière utilise la classe QSvgRenderer pour son rendu.
Un fichier est chargé et affiché dans un widget QSvgWidget grâce à la fonction load(const QString& cheminDuFichier).
Si vous souhaitez créer votre propre widget qui utilise les fonctionnalités SVG, vous devez utiliser le moteur de rendu et charger le fichier SVG grâce à la fonction load(const QString&) de la classe QSvgRenderer. Pour diriger le rendu du fichier SVG vers votre widget, vous fournissez à l’instance du QSvgRenderer l’instance de QPainter* qu’il doit utiliser pour tracer le contenu du fichier à l’écran.
3. Exporter au format SVG
Il est aussi possible d’exporter...
QtPrintSupport
Le support de l’impression facilite la gestion des impressions depuis vos interfaces graphiques sur tous les systèmes d’exploitation. Grâce à ce module, vous pouvez proposer à l’utilisateur le choix de l’imprimante et de définir des réglages d’impression comme n’importe quel autre logiciel, et déclencher une impression de dessins, de documents et même d’un widget complet.
La particularité de la classe QPainter, en tant qu’élément doté de fonctions de dessin est sa pagination. En effet, les dimensions du dessin sont limitées au format de la page mise en place dans l’imprimante et, lorsque les limites sont atteintes, nous devons changer de page.
L’impression pourra se faire aussi bien sur une imprimante physique que dans un fichier au format PostScript.
1. Intégration
Le module QtPrintSupport est intégré à votre projet grâce à l’ajout du mot-clé printsupport dans la déclaration QT de votre fichier .pro.
QT += printsupport
L’impression repose tout particulièrement sur les fonctionnalités de la classe QPainter, qui fait partie du module Qt Gui.
2. Choisir l’imprimante
Le choix de l’imprimante doit évidemment être laissé à l’utilisateur. Pour cela, nous devons lui afficher la boîte...
QtWebkitWidgets
Le module QtWebkitWidgets prend en charge l’interprétation des contenus web (HTML, CSS et JavaScript) et leur rendu dans un widget et éventuellement un navigateur complet. Pour cela, il utilise le moteur de rendu WebKit de Apple et Nokia (à qui Qt a appartenu pendant un temps) et assure un affichage extrêmement rapide des pages, même si elles contiennent des scripts JavaScript complexes.
1. Intégration
Le module QtWebkitWidgets est intégré à votre projet grâce à l’ajout du mot-clé webkitwidgets dans la déclaration QT de votre fichier .pro.
QT += webkitwidgets
Les classes de ce module vous permettront à la fois d’afficher des pages web complexes et dynamiques, mais aussi d’accéder à leur contenu et de modifier celui-ci.
2. Afficher une page web
Qt fournit un composant du type widget pour afficher une page HTML interprétée directement dans une fenêtre d’application. Ce composant est implémenté dans la classe QWebView, cet élément apparaît dans le designer de Qt en tant que QWebView dans la section Display Widgets.
Pour charger une page web dans une instance de QWebview vous avez simplement à utiliser la fonction load(QUrl&).
//Définition de l'URL
QUrl url("www.editions-eni.fr") ;
//Chargement de la page
ui->webView->load(url) ;
Le code source est disponible dans le projet Client_Web.
La classe QWebView émet plusieurs signaux permettant de connaître son état :
-
linkClicked(const Qurl&) : signale que l’utilisateur a cliqué sur un lien dans la page web.
-
loadProgress(int) : indique que le chargement de la page est en cours, le pourcentage est passé en argument.
-
loadFinished(bool) : indique que le chargement est terminé, l’argument est positionné à vrai en cas de succès, faux sinon.
-
loadStarted() : indique que le chargement de la page a commencé.
Une vue web (QWebView) comprend une page web (QWebPage) qui affiche la page. Celle-ci peut être obtenue grâce à la fonction page() qui retourne l’instance de QWebPage* utilisée pour la page en cours.
Une page web est principalement...
Qt Charts
Ce module permet de créer très simplement des diagrammes à barres, circulaires, radars et autres.
C’est un module optionnel disponible avec le kit depuis la version 5.6 sous licence libre. Dans les versions précédentes il était disponible sous licence commerciale uniquement.
1. Installation
Si vous ne l’avez pas installé, relancez l’utilitaire Maintenance Tool et choisissez Qt Charts dans la liste des modules additionnels.
2. Licences
Prenez garde à la licence de ce module. Il est livré en tant que module additionnel car sa licence n’est pas la même que celle des modules intégrés à Qt. En effet, il est exclusivement proposé sous licence GPLv3. Cette licence est dite fortement contaminante.
La conséquence pour vos applications est que vous devrez mettre à disposition de ceux qui le demanderont tout le code source de votre application, à partir du moment où vous lierez dynamiquement la bibliothèque Qt Charts avec votre exécutable.
3. Intégration
Pour activer le module Qt Charts dans votre application, vous devez modifier la directive QT :
QT += charts
4. Présentation
Qt Charts est un module d’affichage de données sous la forme de diagrammes. Il ne prend en charge que la partie visuelle. Votre travail, en tant que développeur est de personnaliser l’aspect graphique (diagramme, couleurs, légende, axes, etc) et de fournir un jeu de données au composant graphique.
Il est utilisable à la fois avec C++ et QML, et vous pouvez lui fournir les données directement ou le connecter à un fournisseur de données dans le cadre d’une utilisation du patron de conception Vue-Modèle.
Dans ce chapitre nous explorerons différents cas d’utilisation, en C++ et en QML, avec et sans conception Vue-Modèle.
5. Principe général
La représentation graphique d’un diagramme est prise en charge par la classe QChartView ou l’élément ChartView en QML qui dérivent du widget graphique QGraphicsWidget.
Un diagramme est une classe dérivée de la classe QChart qui sera affichée par l’instance de QChartView.
Un diagramme contient une ou plusieurs séries de données (classe dérivant...