Qt Creator 4.4 Beta

La nouvelle mouture de Qt Creator, numérotée 4.4, s’approche : la préversion Beta est maintenant sortie. Au niveau de l’éditeur textuel, elle fournit maintenant des annotations à même le code : des avertissements et des erreurs en provenance du modèle de code Clang, des marque-pages. Ainsi, toutes ces informations sont disponibles sans devoir déplacer la souris sur une ligne mise en évidence ou sur le marqueur du côté gauche.

Au niveau de la refactorisation du code C++, le renommage d’un symbole propose automatiquement de renommer le fichier (s’il porte le même nom), ainsi que les fichiers liés. Le modèle de code Clang (s’il est activé) est maintenant aussi utilisé pour mettre en surbrillance l’identifiant sous le curseur (avant, le modèle de Qt Creator s’en chargeait à tous les coups).

Côté CMake, il devient possible de filtrer les variables lors de la configuration de la compilation. En mode serveur, les fichiers d’en-tête du répertoire racine sont aussi affichés.

Windows CE n’est plus géré par Qt Creator, n’étant plus maintenu depuis belle lurette. L’intégration avec ClearCase est désactivée par défaut.

Voir la liste complète des changements.

Télécharger Qt Creator 4.4 Beta 1.

Le module QtQuick.Shapes fait son apparition avec Qt 5.10

Dessiner des formes arbitraires n’a jamais été chose aisée avec Qt Quick. De base, on ne peut dessiner que des rectangles (avec des bords carrés ou arrondis, au choix). Impossible de dessiner une autre forme, à moins de faire appel à du code JavaScript et l’API Canvas ou de coder soi-même la forme en C++. C’est d’ailleurs l’une des limitations historiques de Qt Quick par rapport à la vue graphique. Avec Qt 5.10, la situation évolue : le module QtQuick.Shapes apporte justement ces éléments manquants… avec une performance inégalée (sauf pour des formes codées en C++).

L’implémentation de ce module a été délicatement pensée. Ainsi, il n’y a aucune pixélisation du rendu : les formes dessinées le sont de manière vectorielles (sans passer par QImage ou un tampon OpenGL), ce qui laisse la possibilité de les afficher avec n’importe quelle résolution, voire de les animer. En effet, l’API est entièrement déclarative et tous les attributs des formes peuvent être animés avec les mécanismes habituels de Qt Quick — sans relancer des calculs inutiles.

Le rendu est implémenté de différentes manières, avec cependant la même API. L’implémentation de base réutilise le moteur de triangulation de QPainter en OpenGL, mais, sur les GPU NVIDIA, il est possible d’utiliser l’extension GL_NV_path_rendering pour accélérer le rendu. Pour le moteur de rendu logiciel de Qt Quick, tout se passe avec QPainter. Dans le futur, il sera ainsi possible d’ajouter un rendu par OpenVG ou Direct3D 12.

Ces formes sont dessinées par un composant Shape, mais la description est effectuée par un ou plusieurs ShapePath. Par exemple, pour dessiner un triangle avec une animation sur la largeur du trait et la couleur de remplissage :

Shape {
    id: tri
    anchors.fill: parent
 
    ShapePath {
        id: tri_sp
        strokeColor: "red"
        strokeWidth: 4
        SequentialAnimation on strokeWidth {
            running: tri.visible
            NumberAnimation { from: 1; to: 20; duration: 2000 }
            NumberAnimation { from: 20; to: 1; duration: 2000 }
        }
        ColorAnimation on fillColor {
            from: "blue"; to: "cyan"; duration: 2000; running: tri.visible
        }
 
        startX: 10; startY: 10
        PathLine { x: tri.width - 10; y: tri.height - 10 }
        PathLine { x: 10; y: tri.height - 10 }
        PathLine { x: 10; y: 10 }
    }
}

Cependant, le module en l’état n’est pas forcément à même de battre la vue graphique en termes de composants à afficher, chaque forme ayant un surcoût en performance à l’affichage — surtout sans accélération graphique, où un trop grand nombre de formes ou d’animations posera rapidement problème. Il est déjà possible de demander le calcul asynchrone de la géométrie, ce qui permet d’afficher rapidement l’interface, les formes Shape venant plus tard, sans retarder le reste de l’interface.

Source : Let There Be Shapes!.

Sortie de Qt Creator 4.3.1

En même temps que Qt 5.9.1 sort Qt Creator 4.3.1, qui corrige également un bon nombre de défauts. Le principal est une fuite de mémoire dans l’autocomplétion du code, qui pouvait vite dégénérer en plantage de l’application (surtout en 32 bits). Cette version apporte également bon nombre d’améliorations en ce qui concerne l’intégration avec CMake, corrige un défaut empêchant de lancer des applications sur des périphériques iOS 10.3. La liste complète des modifications est disponible sur le site officiel du projet.

Sortie de Qt 5.9.1

Les développeurs s’y étaient engagés : Qt 5.9 aura un support sur le long terme et des versions correctives relativement rapprochées. Qt 5.9.0 est sorti fin mai, la première version de maintenance Qt 5.9.1 est disponible depuis la fin juin.

Aucune nouvelle fonctionnalité, comme prévu, uniquement des correctifs (détaillés module par module). Certains problèmes majeurs sont connus, comme l’impossibilité de compiler Qt en statique avec Visual C++ 2017 (plus que probablement un problème du compilateur), de compiler des modules supplémentaires par rapport à ceux livrés par l’installateur en ligne sous Linux à mois d’utiliser ICU 56, d’ouvrir des projets iOS dans Qt Creator (le correctif sera livré avec Qt 5.9.2) ou de compiler des projets UWP avec Visual C++ 2017 (corrigé avec Qt Creator 4.3.1). Ceux qui compilent pour iOS auront intérêt à utiliser l’errata déjà disponible pour cette version (il sera inclus dans Qt 5.9.2).

Source : Qt 5.9.1 Released, Qt 5.9.1 Known Issues.

Qt 5.10 pourra créer des documents PDF/A

Le format PDF est utilisé de manière assez universelle pour échanger des documents, au point qu’une version spécifique à l’archivage a été créée : PDF/A. Son succès est tel que certaines institutions requièrent des PDF à ce format pour tout archivage électronique. Cette version correspond à la norme PDF épurée d’une série de fonctionnalités plus complexes, afin de garantir que le rendu soit constant à travers les implémentations : pas de contenu dynamique (JavaScript, audio, vidéo), pas de contenu externe (comme des polices non embarquées).

Qt, de son côté, peut générer des fichiers PDF depuis sa version 4.1, grâce à la classe QPrinter, en définissant son format de sortie à QPrinter::PdfFormat, qui correspond à la norme PDF 1.4. On peut ainsi ajouter du texte dans le fichier PDF de sortie, qui est stocké sous la forme de caractères (ce qui permet une recherche à travers le document et un rendu décent peu importe le facteur de zoom), mais aussi des images (qui correspondront à des images aussi dans le fichier PDF, avec les inconvénients associés : lors d’un zoom, la qualité se dégrade).

La version de PDF/A la plus souvent requise est PDF/A-1b et Qt 5.10 pourra générer des fichiers à ce format. Comme PDF/A-1b est basé sur PDF 1.4, les modifications à apporter étaient assez minimes. Cependant, certaines contraintes ont dû être ajoutées : les images ne peuvent pas inclure de transparence. Deux autres contraintes ne sont pas encore implémentées : les métadonnées doivent être écrites au format XMP et tout profil colorimétrique ICC doit être embarqué dans le fichier PDF.

Pour choisir le niveau de compatibilité PDF, une propriété de QPainter a été ajoutée : pdfVersion, qui peut prendre les valeurs PdfVersion_1_4 (pour obtenir le même résultat que précédemment) ou PdfVersion_A1b (pour exploiter le nouveau code).

Source : Creating PDF/A documents with Qt.

Qt 3D se dotera d’un moteur de rendu Vulkan

Qt 5.10 arrivera, fin d’année, avec une première gestion de Vulkan, c’est-à-dire quelques classes et fonctions pour aider à intégrer une interface codée en Vulkan dans une application Qt. Les développements côté Vulkan ne s’arrêtent cependant pas là en ce qui concerne Qt 3D : en effet, des développeurs de KDAB (à l’origine du Qt 3D actuel) travaillent sur un moteur de rendu basé sur Vulkan pour Qt 3D. Ces efforts sont pour le moment assez limités et toujours en cours, mais ont le mérite d’exister.

Aucune date n’est avancée jusqu’à présent, mais on peut être raisonnablement sûr que le projet aboutira. En effet, l’architecture de Qt 3D est spécifiquement prévue pour permettre des optimisations par rapport à l’API utilisée pour le rendu, grâce à son graphe de trame. De plus, un moteur de rendu Vulkan permettrait, par rapport à son équivalent OpenGL, de libérer quelque peu le processeur de certaines tâches à effectuer, de là limiter la consommation énergétique et augmenter fortement la performance dans des scénarios comme les applications embarquées, actuel cheval de bataille de Qt.

Voir le code actuellement proposé.

Sortie de GammaRay 2.8

La version 2.8 de GammaRay, l’outil d’introspection pour Qt, vient de sortir. Son objectif est de montrer, dans une application, en direct, le comportement du code Qt et de ses structures de données spécifiques. Cette nouvelle version s’est focalisée sur Qt Quick, avec des outils pour gérer les dispositions et Qt Quick Controls 2 (voir l’image ci-dessous) ; plus expérimental, GammaRay offre des possibilités d’analyse du comportement du moteur de rendu logiciel. Par ailleurs, le mode de débogage à distance a été fortement optimisé : dans les versions précédentes, il pouvait sans problème saturer un lien réseau à cent mégabits par seconde — ce qui est dommageable dans l’embarqué. Cette nouvelle version ajoute aussi un navigateur de fuseaux horaires.

Le code C++ créant les QObject est maintenant directement lié à GammaRay, ce qui permet d’ouvrir le fichier source à l’endroit où l’objet inspecté a été instancié. Cette fonctionnalité était autrefois réservée aux projets Qt Quick ; actuellement, elle n’est disponible que sous Linux et requiert (tout comme un débogueur traditionnel) l’accès aux informations de débogage.

Avec diverses améliorations dans la manière de gérer le cycle de vies objets, le navigateur de métaobjet peut montrer des statistiques précises pour les types définis dynamiquement (ce qui est très courant avec Qt Quick et Qt SCXML). Cela facilite la recherche de problèmes dans la création d’objets potentiellement très lourds mais à la durée de vie courte dans les applications Qt Quick.

Source : GammaRay 2.8.0 Release.