Sortie de Qt Creator 4.1 RC1

Après un mois de peaufinage, voici venu Qt Creator 4.1 RC1. Il s’agit principalement de correction de défauts divers. Néanmoins, cette RC vient avec deux nouveaux thèmes pour l’éditeur de code, basés sur la palette de couleur Solarized : l’un est clair, l’autre foncé, ce qui devrait convenir à la plupart des utilisateurs. Ces deux thèmes sont des dérivés des nouveaux thèmes plats arrivés avec la préversion Beta.

Une fois n’est pas coutume, cette RC est annoncée avec un problème majeur connu : l’incompatibilité entre le compilateur Visual C++2015 Update 3 et le modèle de code Clang en version 3.8 (avec cette combinaison, il n’est plus possible d’utiliser l’extension d’analyse statique du code). De plus, l’empaquetage est loin d’être parfait, puisque le fichier indiquant les changements dans cette RC n’a pas été mis à jour (il est cependant disponible en ligne).

Télécharger Qt Creator 4.1 RC1.
Source : Qt Creator 4.1 RC1 released.

Sortie de GammaRay 2.5

GammaRay est un puissant outil d’introspection pour les applications Qt, il sert notamment lors du débogage. (Une présentation plus complète en a été faite pour la précédente version.) KDAB décrit la version 2.5 comme la plus importante en termes de fonctionnalités : GammaRay est maintenant compatible avec Qt 5.7, permet l’introspection dans des scènes Qt 3D ; côté Qt Quick, il devient possible d’accéder aux chaînes de propriétés contextuelles et aux informations de type ; partout, GammaRay offre des statistiques sur les métaobjets.

L’interface de GammaRay a aussi été quelque peu revue, notamment pour la navigation dans le code source (tant C++ que QML), dans les objets et dans les fichiers de ressources. L’inspection à distance a également été améliorée, avec la possibilité de sélectionner des éléments Qt Quick et Qt Widgets, de rediriger les stimuli vers des widgets distants, de mesurer des distances dans une vue Qt Quick distante, de zoomer dans une interface distante.

Côté réseau, la communication peut maintenant se faire par IPv6. Il est aussi maintenant possible d’accéder aux informations sur le chiffrement SSL et sur les certificats utilisés par QSslSocket. Les témoins de connexion sont explorables par un outil dédié.

Télécharger GammaRay 2.5.0.
Sources : GammaRay 2.5 release, [Gammaray-interest] [ANNOUNCE] GammaRay 2.5.0.

Qt WebBrowser 1.0

Qt WebBrowser est un navigateur Web prévu spécifiquement pour les plateformes embarquées. Il exploite plus particulièrement Qt WebEngine, c’est-à-dire le moteur d’affichage derrière Google Chrome. Il gère donc les toutes dernières fonctionnalités de HTML5, tout en ayant une interface minimale prévue pour les écrans tactiles. L’utilisateur est relativement limité, mais les besoins de base sont assouvis : recherche dans une page, favoris, onglets, affichage de vidéos en plein écran et audio (selon les codecs disponibles), mode de navigation privée.

Pour le compiler, les besoins sont minimaux : ce navigateur exploite Qt Quick, Qt WebEngine et Qt VirtualKeyboard. Tous ces modules sont disponibles dans l’édition libre de Qt dès la version 5.7. Pour des performances acceptables, l’accélération OpenGL est requise, avec un gigaoctet de mémoire — même si les développeurs indiquent qu’il reste beaucoup de chemin à parcourir au niveau de l’utilisation des ressources.

Jusqu’à présent, Qt WebBrowser n’était qu’une démo livrée avec Qt for Device Creation, une version propriétaire de Qt ciblée pour les développeurs embarqué. Maintenant, il est disponible sous les licences GPL 3 et commerciale.

Source et image : Qt WebBrowser 1.0.
Voir aussi : la documentation, les sources.

Sortie de Qt Creator 4.0.3

Une nouvelle version corrective de Qt Creator 4.0 vient de sortir. La 4.0.3 corrige quelques défauts mineurs. Notamment, sous OS X 10.8 et FreeBSD, le bouton pour lancer un programme était parfois désactivé. Quand Clang se chargeait de l’analyse du code C++, Qt Creator remplaçait parfois les points en tant que séparateurs décimaux par des flèches. L’ouverture de projets CMake depuis des liens symboliques ne fonctionnait pas toujours. Dans les projets QMake, l’EDI détecte maintenant l’ABI à utiliser pour NetBSD et OpenBSD.

Télécharger Qt Creator 4.0.3.
Source : Qt Creator 4.0.3 released.

Qt Creator 4.1 Beta

La prochaine version de Qt Creator, numérotée 4.1, s’approche : une préversion Beta est maintenant disponible. La fonctionnalité la plus visible est, à nouveau, purement esthétique, avec deux nouveaux thèmes plats : l’un sombre, l’autre clair. Ils sont disponibles dans les options de l’EDI.


En coulisses, Qt Creator gère mieux les ressources disponibles : les documents qui n’ont pas été modifiés ni au premier plan pendant un certain temps ne seront plus gardés en mémoire. L’outil dispose d’une optimisation similaire depuis belle lurette lors de la restauration d’une session : seuls les documents visibles sont chargés. Les autres documents restent accessibles comme s’ils étaient chargés en mémoire. Ce comportement peut être configuré, bien évidemment.

Toujours dans les options, il est maintenant possible d’indiquer à Qt Creator s’il doit insérer les guillemets et les parenthèses par paire de manière séparée : les deux ne sont plus fusionnés en une seule option. Cette même distinction se fait dans le cas où l’utilisateur entre un tel caractère manuellement, pour indiquer à Qt Creator s’il remplace le caractère inséré automatiquement ou non.

Côté analyse de code, le moteur Clang a été mis à jour vers la version 3.8, ce qui lui permet d’analyser sans problème les fichiers d’en-tête de Visual C++ 2015.

L’outil de conception graphique d’interfaces Qt Quick a vu sa performance améliorée, avec un travail sur le processus de mise à jour du document QML pendant l’édition. Il est aussi maintenant possible de choisir le style des composants Qt Quick Controls 2.

Les projets CMake sont mieux gérés depuis la version 4.0, de nouvelles options sont apparues : CMake peut ne plus être lancé automatiquement, un choix à faire outil par outil ; par défaut, CMake n’est d’ailleurs plus lancé automatiquement quand Qt Creator n’est pas l’application active. Les erreurs de CMake sont mieux analysées et présentées à l’utilisateur.

Filippo Cucchetto, créateur de NimQml, qui permet d’exploiter des interfaces Qt Quick depuis le langage Nim, a contribué une extension pour ce langage dans Qt Creator, à activer manuellement. Elle propose la coloration syntaxique, l’indentation, la configuration des styles de code, la compilation, l’exécution et le débogage.

Télécharger Qt Creator 4.1.0 Beta.
Source : Qt Creator 4.1.0 Beta released.

Qt et WinRT : quoi de neuf ?

Windows Runtime (WinRT) est une plateforme logicielle qui tend à homogénéiser l’interface des applications Windows universelles (UWP, universal Windows platform), notamment imposée sur le Windows Store. Cette bibliothèque vise à remplacer l’API Win32, qui commence à montrer son âge, notamment parce que cette API n’est pas du tout orientée objet et provient de l’époque Windows 95 : au contraire, WinRT s’inscrit dans le futur. Cet cadre logiciel, arrivé avec Windows 8, exploite les concepts orientés objet et s’étend sur bon nombre de plateformes, tant de bureau (Windows 8, 8.1, 10) que mobiles (pour téléphones — Windows Phone 8.1, Windows 10 Mobile — ou non — Windows 10 IoT, Hololens, Xbox One). Qt est, bien évidemment, compatible avec WinRT et permet de développer des applications UWP, en profitant des dernières avancées de Microsoft (comme le glisser-déposer).

État actuel avec Qt 5.6 et 5.7

Qt 5.6 a nécessité pas mal de travail côté WinRT. En effet, depuis cette version, toute l’interface est dessinée dans une couche XAML, afin de s’intégrer au mieux à la plateforme. Actuellement, le code permet d’échanger pas mal d’informations internes avec le moteur d’exécution XAML, notamment afin d’intégrer du contenu XAML dans une application Qt : Qt WebView en profite pour utiliser le navigateur local (Microsoft Edge) dans une application Qt Quick.

Qt 5.6 est arrivé avec d’autres fonctionnalités intéressantes, comme la gestion de la caméra dans Qt Multimedia ou la reconnaissance du stylet (notamment pour les Microsoft Surface). Qt 5.6.1 améliore le confort de vie pour développer des applications UWP au niveau des fichiers de projet qmake : il n’est plus nécessaire de préciser CONFIG += windeployqt pour créer une solution Visual Studio, cela est fait automatiquement ; de même, en précisant QT += multimedia, bon nombre de fonctionnalités sont activées, comme l’accès à la webcam ou au micro (qu’il est bien sûr possible de désactiver).

Qt 5.7 n’est pas resté en retrait pour les améliorations. Ainsi, l’audio passe maintenant par WASAPI, qui garantit une latence moindre que précédemment — également accessible sous Windows, pour du développement d’interfaces classiques. L’inconvénient est alors que WASAPI synchronise le taux d’échantillonnage avec celui du pilote audio, sans donner la possibilité au développeur de convertir automatiquement le flux audio. Cette fonctionnalité n’est pas activée par défaut et doit être compilée séparément.

Aussi, côté Qt Quick, le code JavaScript peut être compilé à la volée (JIT), comme sur la plupart des autres plateformes. Initialement, comme Apple, Microsoft avait interdit toute génération de code pour des applications Windows Store, comme mesure de sécurité. Cependant, cette interdiction semble avoir été levée, même s’il n’y a pas encore eu de communication officielle à ce sujet. Grâce à cela, les applications Qt Quick peuvent être sensiblement accélérées, certains fonctions s’exécutant plus de cent fois plus vite. Au vu des incertitudes à ce sujet, cette fonctionnalité doit être activée manuellement et pourrait être retirée d’une prochaine version de Qt.

Fonctionnalités en cours de développement

Dans le futur, les développeurs espèrent que le module JIT pourra être activé pour les plateformes ARM : de par leur puissance, toute accélération possible du code est bonne à prendre. Cependant, toutes les fonctionnalités requises ne sont pas encore disponibles dans les API fournies par Microsoft, même si l’implémentation a déjà commencé côté Qt.

Les fonctionnalités de Qt 5.8 seront arrêtées d’ici un mois, WinRT aura droit à son lot. Notamment, le Bluetooth basse énergie sera accessible (comme sous Android et iOS actuellement) et le module Qt Purchasing sera étendu au Windows Store pour fournir des achats à l’intérieur des applications. Qt Speech arrivera en préversion technologique, avec côté WinRT la mise à disposition de l’API de synthèse vocale de Microsoft. De même, les travaux de découplage de Qt Quick par rapport à OpenGL ne serviront pas qu’à implémenter certaines parties sur Vulkan : ces applications pourront être affichées avec DirectX 12.

Source : Status Update on Qt for WinRT / UWP.
Merci à Claude Leloup pour ses corrections.

Sortie de Qt 5.6.1-1

Très peu de temps après Qt 5.6.1, la gravité d’un défaut (QTBUG-53761) a été remarquée : l’utilisation d’applications Qt Quick un peu sérieuses est devenue impossible avec Qt 5.6.1 (ce qui n’était pas le cas avec la 5.6.0). Le problème vient de la gestion des caches : dès que soixante-quatre composants ont été importés (des fichiers QML ou JavaScript), mais que tous n’ont pas été instanciés, le système de gestion des caches pouvait effacer certains composants non instanciés. Lors de leur utilisation effective, l’interpréteur ne pouvait donc plus les trouver, ce qui résultait en une série d’erreurs difficilement compréhensible :

Starting /dev/Qt5.6.1-test/Examples/Qt-5.6/quickcontrols/extras/flat-Desktop_Qt_5_6_1_GCC_64bit-Debug/flat...
QML debugging is enabled. Only use this in a safe environment.
qrc:/ExtrasImports/QtQuick/Controls/Styles/Flat/GroupBoxStyle.qml:64: TypeError: Cannot read property 'flat' of null
qrc:/ExtrasImports/QtQuick/Controls/Styles/Flat/GroupBoxStyle.qml:62: TypeError: Cannot read property 'flat' of null
qrc:/ExtrasImports/QtQuick/Controls/Styles/Flat/GroupBoxStyle.qml:82: TypeError: Cannot read property 'checked' of null

Pour les détails temporels : le défaut avait été corrigé avant la sortie de Qt 5.6.1, mais sa gravité avait été mal estimée, la sortie de Qt 5.6.1 n’a donc pas été retardée, puisque chaque modification doit être testée. Au fil du temps et des rapports qui ont défilé sur l’application de suivi des défauts, les développeurs ont remarqué que ce problème était grave, d’où cette nouvelle version. Par contre, le correctif a été intégré à Qt 5.7.0 à temps pour la sortie de cette version.

Télécharger Qt 5.6.1-1.
Source : Qt 5.6.1-1 Released.

Qt WebKit NG TP2

Peu après les premières annonces officielles, une nouvelle préversion technologique du nouveau Qt WebKit fait son apparition. Dans les nouveautés, on peut compter une implémentation de l’API HTML5 IndexedDB complètement refaite : elle ne dépend plus de LevelDB, un moteur de base de données de Google, tout en apportant un meilleur niveau de compatibilité avec la norme.

Pour les vidéos, l’API Media Source Extensions est activée quand GStreamer est disponible. Cette implémentation est encore expérimentale et, notamment, toutes les vidéos YouTube ne fonctionnent pas (lorsqu’une publicité est affichée au début). Il faut encore l’activer manuellement, mais elle devrait l’être automatiquement dans une prochaine version.

D’autres API sont maintenant disponibles : la détection de l’orientation et des mouvements, principalement pour les applications mobiles ; les manettes de jeu, uniquement pour Linux. Aussi, il devient possible d’imprimer. Le projet est maintenant compatible avec OS X 10.10.

Au niveau de l’infrastructure, le projet s’intègre mieux avec qmake et CMake, ce qui facilite son utilisation dans vos projets. La documentation est maintenant générée aux formats HTML et QCH, ce qui permet notamment son utilisation depuis Qt Creator ou Qt Assistant.

Maintenant, des binaires précompilés sont disponibles : pour Windows 32 et 64 bits (compilation avec Visual C++ 2015) ainsi que pour OS X.

Source : [Development] [Announcement] QtWebKit Technology Preview 2.

Sortie de Qt 5.7

Trois mois après Qt 5.6, une version avec assistance technique à long terme, voici venue l’heure de Qt 5.7. Elle n’est pas dénuée de nouvelles fonctionnalités, cependant, à cause des différents retards dans le développement (d’abord pour Qt 5.6, puis 5.7, mais dans une moindre mesure) : outre les habituelles corrections de défauts en tout sens (néanmoins pas toujours en quantité suffisante) et améliorations de performance, cette nouvelle version de Qt vient avec de nouvelles fonctionnalités pour le domaine automobile et une série de modules anciennement uniquement disponibles sous licence commerciale, avec des changements au niveau des licences. Maintenant, les éditions commerciale et libre sont sur un pied d’égalité au niveau des fonctionnalités (à l’exception du Qt Quick Compiler, cet écart sera résorbé pour Qt 5.8).

Cette version pouvant laisser de côté la compatibilité avec une série d’anciens compilateurs (Qt 5.6 étant disponible pour ceux qui ne peuvent pas encore faire de mise à jour à ce niveau), le code même de Qt peut exploiter des fonctionnalités bien plus modernes de C++11 (constexpr, sémantique de déplacement, auto, for sur des intervalles). Ainsi, le code de Qt sera plus facile à maintenir dans le futur. Ces efforts de mise au goût du jour se poursuivront dans les prochaines versions et pourront offrir de nouvelles API plus modernes.

Un autre point très important de Qt 5.7 est l’arrivée de Qt 3D en version finale : il sera bien plus facile d’intégrer des graphismes 3D dans des applications, voire de transformer toute l’interface en 3D. Ce moteur 3D complet, accessible tant en C++ qu’en QML, rejoint l’intégration précédente d’OpenGL, le module Qt Canvas 3D et le nouveau Qt Data Visualization. Ce module dépasse de loin le simple rendu 3D, en proposant un framework 3D complet et extensible.

Côté Qt Quick, les contrôles de base ont droit à une cure de jouvence. La bibliothèque Qt Quick Controls arrive en version 2.0, la modification principale étant que les composants proposés ne sont plus seulement prévus pour les plateformes de bureau, mais également pour l’embarqué. Ils sont donc bien plus légers en mémoire et leur performance a été améliorée. Ces améliorations viennent avec quelques limitations, un peu en fonctionnalité, un peu en apparence (il n’y a plus d’intégration avec le style natif de la plateforme). Par contre, les gains en performance sont impressionnants.

De nouvelles fonctionnalités arrivent en tant que préversions technologiques, comme le Qt Wayland Compositor, très utile pour les applications automobiles de Qt. Ce module existait depuis quelques versions de Qt, son API a été retravaillée et stabilisée pour Qt 5.7, tant en C++ qu’en QML.

Un autre nouveau module est Qt SCXML, qui facilite l’utilisation de machines d’état au format SCXML dans Qt, en étant intégré dans le cadre actuel. Qt Gamepad facilite l’utilisation des manettes de jeu, toujours côté C++ et QML, sur bon nombre de plateformes : Windows, Linux côté bureau, mais aussi Android et iOS pour le mobile.

Source : Qt 5.7 released.
Télécharger Qt 5.7.

Le retour de Qt WebKit ?

Pour sa version 5.6, Qt officialisait l’abandon du module Qt WebKit, qui intégrait un moteur de rendu Web dans des interfaces Qt : WebKit, le moteur de Safari et dont dérive celui de Chrome (Blink). Ce module a été remplacé par Qt WebEngine, qui se base sur un moteur bien plus complet : Chromium, intégrant à la fois une pile réseau et multimédia. Qt WebEngine est bien plus lourd et monolithique que son prédécesseur, ce qui n’est pas sans poser quelques problèmes de distribution.

De plus, le passage de Qt WebKit à Qt WebEngine ne se fait pas sans douleur, puisque les interfaces sont assez différentes et que Qt WebEngine ne fournit pas le même degré d’intégration à Qt. Aussi, Qt WebEngine n’est pas exploitable à un niveau assez bas, pour travailler directement dans le DOM ou effectuer un rendu hors écran, ce qui est très utile pour toutes les applications devant traiter des pages Web.

C’est pourquoi certains développeurs se sont lancés dans un projet de réhabilitation de Qt WebKit, en mettant à jour la version utilisée du moteur tout en gardant la même API et ABI. Bien que ce projet soit encore à l’état embryonnaire, cette mise à jour apporte bon nombre d’avantages par rapport aux dernières versions officielles du module, notamment au niveau des fonctionnalités disponibles en JavaScript (une bonne partie d’ES2015) et des API HTML5 (WebAudio, images adaptées à la résolution). Le développement est loin d’être terminé : l’API widgets est relativement prête, mais pas du tout côté QML. Des API HTML5 comme IndexedDB et WebGL ne sont pas disponibles, ni les extensions (tant côté Qt que NPAPI).

Cependant, au niveau des plateformes compatibles, la liste s’amenuise par rapport à l’itération précédente de Qt WebKit : pas d’Android, de QNX ou de WinCE. L’un des freins au module existant était la nouvelle API de WebKit, mais les développeurs de ce nouveau projet ne sont pas sûrs de travailler sur une compatibilité avec Windows pour cette API WebKit 2. De plus, les développeurs de WebKit ont une politique nettement plus agressive au niveau des normes C++ utilisables dans leur code : ils sont passés depuis longtemps à C++11 (alors que Qt s’apprête seulement à franchir ce pas avec Qt 5.7) et C++14 dans les versions de développement actuelles. En d’autres termes, le choix de compilateurs se restreint.

Pour toutes ces raisons, il apparaît de manière relativement claire que ces efforts ne pourront pas se faire sous le nom de Qt WebKit, pour éviter la confusion avec le module précédent : ces efforts pourraient se nommer WebKitQt (comme les autres ports de WebKit) ou Qt WebKit NG (le nom de code interne actuel). En plus d’autres considérations pratiques, comme un alignement sur WebKitGTK, le planning des versions ne sera que rarement aligné sur celui de Qt. Par conséquent, WebKit ne fera probablement jamais son retour parmi les modules distribués d’office avec Qt, mais plutôt comme extension, téléchargeable à la carte… ce qui n’empêchera pas le développement sous l’ombrelle du Qt Project.

Sources : [Development] QtWebKit is coming back, [webkit-qt] [Announcement] QtWebKit Technology Preview 1.
Voir aussi : le site de Qt WebKit Reloaded.