Dernière mise à jour : 22/03/2012 - 35 articles
Chargement...
C++
-
Vous avez toujours rêvé de savoir à quoi correspondait ABI, name mangling et autres virtual tables ?
Vous savez déjà ce dont il s'agit mais vous aimeriez en savoir plus ? Alors cet article est pour vous !
-
Après avoir dégrossi les ABI, nous allons cette fois nous attaquer aux conventions d'appel,
une partie des ABI, mais néanmoins très importante.
-
Parfois, aller tout à fait à l'encontre de ce qu'on veut généralement, cela ne peut apporter qu'un bien énorme. Surtout quand on se débarrasse d'un peu de précision quand elle n'est pas importante et qu'on peut ainsi économiser les batteries de tous nos téléphones.
-
L'un des buts de Qt est de rendre simple ou, du moins, de faciliter le portage d'un système d'exploitation à un autre. Une application Windows transférée sur un bureau Linux ? Bien sûr. Une application Mac OS X sous Symbian ? OK.
-
Ce week-end, un utilisateur a posté sur la mailing list qt4-preview-feedback un message disant que la documentation de QAtomicInt avait besoin d'un peu de travail. Je lui ai répondu que la sémantique d'ordonnancement mémoire serait mieux expliquée dans un livre que dans la documentation Qt.
En y repensant plus tard, je me suis dit que nous pourrions ajouter un peu de documentation à ce sujet. Voici un petit test.
-
Alors que beaucoup sont enthousiastes au sujet des technologies QML et JavaScript, quelques-uns d'entre nous continuent de coder en C++. Le C++ est sur le point d'être mis à jour : le C++11 (anciennement connu sous le nom C++0x). Le projet final a été approuvé en mars dernier par le comité de normalisation du C++ et la spécification finale devrait être publiée cet été.
Les pointeurs
-
Les pointeurs intelligents sont très nombreux dans Qt : pas
moins de huit classes différentes sont disponibles.
Tous ne sont pas publics, tous ne sont pas conseillés.
Cela en laisse quand même une belle floppée.
Après la description de tous ces pointeurs intelligents, un
approfondissement du dernier arrivé, QScopedPointer, sera
effectué.
La compilation
-
QMake est l'un de ces outils cruciaux qui doivent juste fonctionner,
sous peine de ruiner totalement votre journée ; à savoir si votre
projet utilise QMake, évidemment.
Avant que QMake ne fasse surface, il y avait TMake. TMake était un
script Perl qui effectuait un bon travail par rapport à ce pour quoi
il avait été conçu à l'époque. Le fonctionnement interne de QMake
était basé sur TMake, puis sur un tas de propriétés et des hacks
par la suite. QMake a fini en tant que bestiole
très-difficile-à-maintenir-sans-casser-quoi-que-ce-soit-d'ésotérique.
La question est : qu'allons-nous en faire ?
-
L'article précédent, sur le site officiel, a engendré un grand nombre de réponses constructives.
Ainsi, pour répondre aux suggestions des intéressés, l'auteur a décidé de publier une réponse sous
la forme d'un nouvel article, présentant qu'il serait dommage de se limiter à des simples réponses
par le biais du système de commentaires.
Le débogage
-
Dans ce premier article sur l'intégration du débogage dans
Qt Creator, l'auteur présente comment celui-ci prend en
charge l'affichage de structure abstraite comme QHash, pour
l'afficher sous une forme proche de ce que les déveleppeurs
conçoit une QHash.
Les threads
-
Vous travaillez régulièrement avec QThread ? Vous utilisez moveToThread() sans vraiment savoir ce que fait cette fonction ?
Vous pensez savoir ce que fait cette fonction mais vous voulez vérifier que vous ne vous trompez pas ?
Cet article répondra à toutes ces questions !
-
L'utilisation des threads vous donne des maux de tête ?
Evitez-les en lisant cet article !
La vue graphique
-
Vous trouvez votres vues graphique trop statique ?
Vous avez envie de l'animer mais vous ne voulez pas gérer le moteur physique vous-même ?
Cet article vous présente Box2D qui s'occupe de toute la partie physique et qui peut facilement être lié avec Qt.
Qt Graphics et performances
-
Le 11 décembre 2009, la documentation de QPainter subissait un
énorme ajout concernant l'optimisation de son utilisation. En
effet, le bon usage de cet outil n'était pas accessible à tous,
il n'était pas présenté dans la documentation. Ceci ne fut qu'un
prétexte à une série d'articles sur l'optimisation de QPainter
et de Qt Graphics en général.
-
Au centre de tous les Qt Graphics, on retrouve la classe QPainter.
Elle permet de faire le rendu dans une surface, grâce à la classe
QPaintDevice. Des exemples de surface de dessin sont : les classes
QImage, QPixmap et QWidget. La façon dont cela fonctionne est
que pour une implémentation donnée de QPaintDevice, nous récupérons
un moteur de rendu personnalisé qui prend en charge le rendu sur
cette surface. Tout cela est expliqué dans notre documentation
"ainsi peut-être pas trop intéressant".
Regardons cela plus en détail.
-
Le moteur de rendu Raster est le moteur de rendu par défaut de
Qt. L'ensemble des fonctionnalités de dessin de Qt y est
implémenté, uniquement par logiciel, ce qui permet d'utiliser
ce moteur sur toutes les plateformes.
Cet article décrit en détail le fonctionnement de ce moteur
pour optimiser le rendu des applications, les fonctionnalités
qui peuvent être très coûteuses en temps et mesure les
performances de plusieurs fonctions.
-
Dans les précédents posts de cette série, Gunnar a décrit le
design et les caractéristiques du système de dessin de Qt et
a exploré le moteur Raster plus profondément. Dans cet article,
je vais décrire les fonctionnalités uniques du système
graphique OpenVG.
-
OpenGL est une API qui permet de bénéficier l'accélération
matérielle (puce graphique) pour réaliser les rendus 2D et 3D.
Le moteur de rendu OpenGL utilise cette API pour améliorer les
performances des rendus dans Qt tout en offrant les mêmes
fonctionnalités que le moteur Raster.
Cet article décrit en détail le fonctionnement de ce moteur
de rendu, quelles sont les fonctionnalités qui sont coûteuses
et comment optimiser son utilisation.
-
En général, quand on souhaite implémenter une fonctionnalité graphique,
plusieurs choix de conception sont possibles. Les utilisateurs de Qt
peuvent choisir de créer leur propre QProxyGraphicsItem, de créer un
QGraphicsItem ou encore de créer un widget personnalisé.
Ce choix conceptuel n'est pas sans conséquence en termes de performances.
Dans cet article, l'auteur présente plusieurs méthodes pour implémenter
un exemple simple de clavier virtuel et montre les conséquences de ce
choix. Il en conclut que les méthodes les plus simples à réaliser ne sont
pas les plus performantes.
-
Utilisation de QTextLayout pour améliorer les performances du rendu de texte
-
Utilisation des threads pour générer du contenu prenant du temps à être afficher
-
On attribue à Albert Einstein la phrase : « la folie est de faire la même chose encore et encore en espérant un résultat différent ». Apparemment, la citation est mauvaise et il faut en fait l'attribuer à Rita Mae Brown mais ce n'est pas important pour le moment. Ce qui est important est que la plupart des applications Qt sont folles.
-
Comment rendre les animations du framework Animation de Qt aussi douces que le velours ? Le QML Scene Graph, le projet de graphe de scène 2D pour QML, apporte une solution technique, afficher une image à chaque synchronisation verticale.
Qt Quick
-
Qt Quick modifie fondamentalement la façon dont vous écrivez des interfaces utilisateurs natives et permet de créer
des applications étonnantes, utilisables aussi bien par les designers que par les développeurs, sans oublier la grande
communauté des "man-cave hackers" et des amateurs. Cet article présente les nouveaux composants disponibles dans cette API.
-
Beaucoup de personnes ont demandé aux trolls de Nokia s'il était
possible de créer des jeux en QML et comment faire. Dans cet
article, l'auteur présente les tutoriels Samegame, Snake et
Minehunt et explique quelle approche utiliser.
-
Avec l'arrivée du module QtDeclarative et du langage QML,
Qt Creator devra bénéficier d'outils supplémentaires dans
sa future version, la version 2.1. C'est donc pour simplifier
l'utilisation de ce module et de QML que les développeurs ont
prévu un certain nombre d'améliorations : améliorations de
l'éditeur QML, du Quick Designer, du débogueur JavaScript/QML
avancé et support direct des applications en C++/QML.
Création : 01/11/2010 ·
Mise à jour : 05/11/2010 · Commentez
WebKit
-
L'HTML5 introduit un nouvel élément de bloc nommé <canvas> pour vos pages web.
Il permet aux développeurs de créer des pages graphiquements riche
à l'aide de cette nouvelle fonctionnalité venant initialement de WebKit.
Cet article présente rapidement les conformités et performances de
<canvas>, les recherches en cours sur cet élément ainsi que de nombreuses démos.
Les bibliothèques complémentaires
-
OpenCL est une librairie multiplateforme qui permet d'utiliser les
processeurs graphiques pour réaliser des calculs lourds. Cet
article présente la classe QtOpenCL, un wrapper facilitant
l'utilisation de OpenCL dans Qt.
Création : 08/04/2010 ·
Mise à jour : 22/08/2010 · Commentez
GUI
-
Qt 4.6 montrait la première intégration du framework Gesture, il est encore tout jeune, ce qui laisse la place aux erreurs de jeunesse, comme cet important changement de comportement.
Les chaînes de caractères
-
Tout le monde sait que tout framework, toolkit et langage plus récent que le C dispose de sa propre classe de chaîne de caractères. Certains disent même qu'il s'agit d'une fonctionnalité du langage C que de ne pas disposer d'un tel type, le gardant ainsi simple et effilé. D'autres en parlent comme d'un inconvénient, leur permettant de bomber la poitrine et de faire tomber les débutants dans le piège de la comparaison de chaînes avec == au lieu de strcmp().
-
Avec les deux dernières versions de Qt, les performances ont été invariablement améliorées. Qt 4.5 a introduit les systèmes graphiques sous forme de plug-ins et de nombreuses améliorations de rendu. Qt 4.6, lui, ne s'est pas focalisé et les performances sur les systèmes embarqués n'ont cessé de s'améliorer avec chaque version de patch.
Le problème avec ces accélérations est qu'on tombe à court de voies d'amélioration pour la prochaine itération. Nous avons jeté un coup d'?il pour de nouvelles zones d'amélioration et, une fois de plus, Qt 4.7 sera plus rapide que ses prédécesseurs.
-
Inspiré par le travail de Benjamin, Samuel et d'autres avec SIMD, profitant de l'opportunité d'apprendre le sujet directement avec les ingénieurs d'Intel, qui connaissent le sujet mieux que quiconque, j'ai décidé de mettre les mains dans le cambouis et de faire aussi un peu de SIMD, après quelques heures de travail. Puisque je ne comprenais pas les bases des modes de composition, de fondu ou de rendu, j'ai décidé de tenter ma chance sur quelque chose de compréhensible : QtCore.
-
La semaine dernière, j'ai eu deux jours assez ennuyants, j'ai donc, pour me motiver, décidé de passer du temps à mon activité favorite : regarder le code assembleur (non, je n'ai pas de vie). Je le fais généralement pour voir comment le compilateur a optimisé certaines portions de code. Par ce biais, on peut découvrir de nouvelles choses et des sources d'améliorations potentielles. Cette semaine-là, j'ai appris quelque chose.
-
La dernière fois, nous avons attaqué le problème de la conversion de Latin1 (ISO-8859-1) en UTF-16 pour les QString. Cependant, la plupart des caractères des expressions littérales en code C++ sont en fait en ASCII, un sous-ensemble de Latin1, qui a la conversion la plus facile vers UTF-16. Les performances de cette opération nous importent donc.
-
La dernière fois, nous avons arrêté nos expérimentations sur la faisabilité de remplacer le codec Latin1 par défaut par UTF-8. Le texte prévu était plus long, mais a été raccourci pour se concentrer sur le code et les performances, sans tenir compte du contexte, des raisons, des détails.
-
Ce week-end, un utilisateur a posté sur la mailing list qt4-preview-feedback un message disant que la documentation de QAtomicInt avait besoin d'un peu de travail. Je lui ai répondu que la sémantique d'ordonnancement mémoire serait mieux expliquée dans un livre que dans la documentation Qt.
En y repensant plus tard, je me suis dit que nous pourrions ajouter un peu de documentation à ce sujet. Voici un petit test.
|
|