Adieu qmake, bienvenue qbs !

Outil ô combien utile à tout développeur Qt… et pourtant ô combien détesté ! Il fonctionne bien, mais n’est pas la partie la plus maintenable de Qt. On a déjà exploré ce que tout remplaçant potentiel de qmake doit être à même de faire (et une liste de commentaires et questions à ce sujet). Notamment, toute une série d’outils actuellement disponibles ont été étudiés, aucun ne remplissait totalement ce cahier des charges (la discussion a bien continué pour Qt 5 sur la mailing list). C’est pourquoi un projet interne à l’équipe de développement de Qt a été lancé pour tester l’une ou l’autre idée, d’où un tout nouvel outil : la Qt Build Suite, qbs, à prononcer cubes.

C’est tout sauf qmake : pas de lien à la version de Qt, génération d’un graphe de compilation propre à partir de la description de haut niveau du projet, plus de génération de Makefile suivi d’un appel à make/nmake/gmake ou autre. En lieu et place, qbs agit comme un make parallèle, il appelle directement le compilateur, l’éditeur de liens et tout autre outil utile à la compilation du projet (à la manière de SCons ou Ant).

C’est un nouveau langage déclaratif : après QML, l’environnement Qt semble se mettre à la mode déclarative. En réalité, le langage utilisé par qbs est une version allégée de QML. Il fournit une représentation facile à utiliser pour l’EDI, tout en laissant la liberté d’écrire des expressions JavaScript. L’éditeur de fichier de projet devrait gérer lui-même toutes les listes de chaînes littérales et, pour les constructions plus compliquées, n’agir qu’en tant qu’éditeur de texte (ces expressions n’étant requises que si l’on a besoin de plus de puissance… et laissant alors littéralement tout faire, au vu de l’extensibilité). Par exemple :

Lire la suite

Utiliser un modèle de liste C++ en QML

La plupart des exemples QML actuels sont exclusivement écrits en QML et JavaScript, probablement pour les garder simples. Cependant, dans une application réelle, pour des raisons de performances, il est recommandé d’écrire autant de code que possible en C++ et de n’utiliser QML que pour l’interface utilisateur. Au final, il est important de savoir comment utiliser un modèle C++ en QML.

QML ne fournit de support direct que pour les modèles de liste pour le moment (comme QAbstractListModel, à cause des vues actuellement supportées (ListView, GridView…).

Le but de cet article est de montrer une manière facile d’utiliser un modèle de liste en C++ en QML au lieu d’un modèle QML comme ListModel.

Utiliser un modèle de liste C++ en QML

Apercevoir la troisième dimension ou l’utilisation multitheadée d’OpenGL avec Qt

Le module QGL de Qt facilite l’intégration de rendu OpenGL dans des applications Qt. Dans cet article, on va montrer comment créer un QGLContext personnalisé qui implémente des fonctionnalités spécifiques non proposées par QGL. On présentera également un exemple simple d’application multiplateforme et multithread avec Qt et OpenGL.

Apercevoir la troisième dimension

Partage de données explicite et implicite avec Qt

Le patron de conception du poids-mouche est souvent utilisé dans Qt. Un poids mouche (flyweight) est un objet qui minimise l’utilisation mémoire en partageant autant de données que possible avec d’autres objets similaires. Qt utilise de manière extensive ce patron mais y fait référence sous le nom de partage implicite.

Partage de données explicite et implicite avec Qt

Créer des applications avec un style Metro avec Qt, exemples en QML et C++

Comme déjà montré, les applications Qt Commercial en C++ et Qt Quick sont utilisables sans aucun problème ni modification sur la préversion pour développeurs de Windows 8. Ici, on montrera, avec plus de détails, comment des applications Qt peuvent adopter un style Metro. Les exemples seront des applications Qt normales dont le style aura été adapté pour ressembler à des applications Metro.

Créer des applications avec un style Metro avec Qt

Orientation de l’écran en QML

Au lancement d’une application sur un périphérique mobile, il est souvent utile de détecter l’orientation de l’écran pour adapter la disposition visuelle. Malheureusement, QML n’est pas encore capable de détecter cette orientation lui-même. Cet article explique comment utiliser l’API de capteurs de QtMobility (Sensors) en QML.

Orientation de l’écran en QML

GDC 2012 et PhysX/APEX

Lors de la Game Developer Conference, il eut été dommage de se priver de quelques nouveautés côté PhysX. Non, les simulations physiques n’étaient pas en reste.

De la simulation de fourrure et de la destruction en temps réel

Ce personnage très laineux est fait de 840 000 particules, simulées comme 100 000 fils. Cette partie de la démo se base sur un solveur encore actuellement en recherche, bien que les résultats soient d’ores et déjà prometteurs.

Le module Destruction d’APEX sera aussi agrémenté d’un module de destruction en temps réel, puisqu’il n’utilise actuellement que des modèles préfracturés – gageons que les applications qui l’utiliseront auront des destructions beaucoup plus naturelles et immersives.

Lire la suite

Implémentation d’une table de hachage à référence faible avec Qt

Une table de hachage à référence faible contient des paires clé-valeur sans que l’on puisse les atteindre. On en recense quatre types :

  • la clé est une référence faible ;
  • la valeur est une référence faible ;
  • la clé ou la valeur est une référence faible ;
  • la clé et la valeur sont des références faibles.

Dans cet article, on propose une implémentation basée sur Qt pour le second type : une table de hachage où la valeur est une référence faible. Ceci signifie qu’une paire clé-valeur sera automatiquement enlevées de la table dès que la valeur ne sera plus utilisée dans le programme.

Ce type de structure est utile pour réduire l’utilisation mémoire en partageant les structures de données sans fuite de mémoire.

Implémentation d’une table de hachage à référence faible avec Qt

Qt Creator 2.5 est sorti en beta

Suite à la sortie de Qt Creator 2.5 en beta, il est grand temps de faire le tour de quelques nouveautés, sans toutes les passer en revue.

C++11

Publié en septembre dernier, le standard ISO C++11 se doit d’avoir un meilleur support dans l’EDI ; notamment, on trouvera les mots-clés nullptr, constexpr, static_assert, noexcept et auto, ainsi que les espaces de noms en ligne et les lambdas (partiellement).

De même, quelques nouvelles actions de refactorisation sont disponibles : insertion d’un #include pour les identifiants indéfinis, extraction de fonction, réarrangement de liste de paramètres, synchronisation des signatures (changer le nom d’un paramètre dans la déclaration répercutera la modification dans le corps).

Lire la suite

Thread travailleur avec Qt en utilisant les signaux et les slots

Qt fournit des classes de threads indépendantes de la plateforme, une manière thread-safe de poster des événements et des connexions entre signaux et slots entre les threads. La programmation multithreadée s’avantage des machines à plusieurs processeurs et est aussi utile pour effectuer les opérations chronophages sans geler l’interface utilisateur d’une application. Sans multithreading, tout est fait dans le thread principal.

Thread travailleur avec Qt en utilisant les signaux et les slots