Shadoware.Org

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - trolltech

Fil des billets - Fil des commentaires

mardi, janvier 25 2011

[C++/Qt] Performance de l'utilisation de QSharedPointer

Présentation

Qt est un framework orienté objet écrit en C++ et permettant de faire des interfaces graphiques. Ce framework est utilisé par le projet KDE depuis ses débuts pour en faire un environnement de bureau très complet.

Qt fournit un ensemble de pointeur intelligent[1] permettant de gérer plus facilement la mémoire. Le but est alors de ne plus avoir à supprimer des objets. La suppression se fera soit par un pointeur intelligent soit par le système de hiérarchie d'objet existant en Qt (l'objet père qui supprime l'ensemble des objets fils qui lui sont rattachés).

Qt propose l'ensemble des pointeurs intelligents suivants:

  • QSharedDataPointer / QSharedData : ces deux classes utilisées ensemble permettent d'écrire un objet avec partage implicite. Cela signifie que l'objet fonctionnera comme la classe QString. Tant que l'objet est copié, passé en paramètre, .... l'objet n'est pas dupliqué (tous les objets pointes vers le même espace mémoire). Au moment où l'objet est modifié, l'objet est dupliqué. C'est ce qu'on appelle le COW[2].
  • QExplictlySharedDataPointer / QSharedData : QExplicitlySharedDataPointer est une variante de QSharedDataPointer. Ce pointeur intelligent, comme son nom l'indique, est détaché uniquement lorsque la méthode detach() est appelée explicitement. Cette classe permet de faire des objets qui fonctionnent comme des pointeurs mais qui sont utilisés sans la notion de pointeur (le *). La suppression des données partagées se fait donc quand tous les objets ne sont plus utilisés.
  • QScopedPointer : Ce pointeur est le plus simple. Il permet de déclarer un pointeur sur le tas et s'occupe de la destruction de l'objet, lorsque le programme sort de la portée du bloc. Cela permet de ne plus se soucier de la libération du pointeur dans les cas d'erreur (exception, retour avant la fin de la fonction car le fichier n'a pu être ouvert, ...).
  • QSharedPointer : Le pointeur dont on parlera dans la suite de ce billet. Il permet de partager non plus des données (comme le fait QSharedData) mais de partager un pointeur[3]. Nous allons voir dans la suite du billet, comment simplement utiliser ce pointeur, et les performances de ce pointeur par rapport à un pointeur standard.

Sommaire

  1. Utilisation de QSharedPointer
    1. A quoi sert-il ?
    2. Comment l'utiliser ?
    3. Comment utiliser this
    4. Comment éviter les références circulaires
    5. Utilisation dans les applications multi-thread.
    6. Utilisation d'un pool
  2. Benchmark
    1. Code source
    2. Le jeu de test
      1. Test de l'allocation
      2. Test de Modification d'une donnée
      3. Test d'affectation
      4. Test de destruction
      5. Résultat du test

Notes

[1] en anglais : smart-pointer

[2] COW = Copy On Write

[3] Ce pointeur est l'équivalent du pointeur intelligent boost::shared_ptr du projet Boost. Boost est une librairie qui ajoute beaucoup de facilité pour les programmes en C++, comme par exemple les smart-pointer dont certains seront inclus dans C++0x, ou de la boucle std::for_each.

Lire la suite...

mercredi, décembre 22 2010

[C++/Qt] Concaténation de chaînes de caractères

Présentation

Qt est un framework orienté objet écrit en C++ et permettant de faire des interfaces graphiques à l’aide de ces widgets. Ce framework est utilisé par le projet KDE depuis ses débuts pour en faire un environnement très complet.

Qt permet donc de faire des interfaces graphiques mais aussi d’accéder à des bases de données SQL, de faire de la communication réseau, une gestion simplifiée des threads, la lecture de fichier XML. Qt intègre aussi le moteur HTML Webkit.

Qt ajoute une couche supplémentaire au C++ permettant de faire de l’introspection de classe un peu plus poussée (comme l’appel d’une méthode dont on ne connaît le nom qu’à l’exécution). Qt permet également la gestion d’évènement par l’intermédiaire d’un système puissant de SIGNALS et de SLOTS.

Dans la suite de cet article nous allons nous concentrer sur une très petite partie de Qt mais qui est utilisée dans beaucoup d’applications écrites en Qt : les chaînes de caractères, et plus précisément, la concaténation de chaînes de caractères.

Lire la suite...

lundi, septembre 21 2009

[Qt] Transformation d'une vue tableau en une vue hiérarchique

Pour visualiser des données internes à l'écran, Nokia/Qt nous propose l'architecture MVC à l'aide des classes QAbstractItemModel et de ses sous classes (QAbstractListModel, QAbstractTableModel, ...). Le but de l'architecture MVC est de séparer la représentation mémoire des données, de l'affichage qu'elles auront.

mvc1.png

Si les données sont par exemple issue d'une requête SQL, le modèle QSqlQueryModel permet de représenter la sélection SQL, à l'écran dans un composant QTableView. Ces données sont alors représentées sous forme d'un tableau deux dimensions.

tableau.png

Si l'on veut représenter les dossiers de l'ordinateur, le modèle QDirView permet d'afficher les données de façon hiérarchique.

qdirview.png

Il est également possible d'écrire nos propres modèles pour représenter nos propres données.

Le but de cet article est de présenter l'écriture d'un modèle, transformant une vue plane (tableau deux dimensions) en vue hiérarchique. Pour cela nous allons prendre l'exemple de l'affichage d'une liste de catégorie[1].

Notes

[1] La construction de notre objet s'est basé sur l'analyse de l'objet QSortFilterProxyModel de Nokia.

Lire la suite...

vendredi, mars 6 2009

XINX 0.8.0.0

Editeur de texte

J'ai le plaisir de vous annoncer la sortie de la nouvelle version de XINX.

XINX est un éditeur de projet web basé sur les technologies XSL, HTML, CSS, JavaScript. Il possède un mode projet permettant de dériver les projets à la manière des consultants GCE de l'entreprise Generix Group.

Cette dernière version a mis beaucoup de temps pour sortir et est moins complète que celle que je souhaitais faire à l'origine. Cela viens de plusieurs raison :

  • de gros changement interne
  • moins de temps le soir et le week-end.

La prochaine version 0.8.1 contiendra les développements que je n'ai pu mettre dans cette version. N'hésitez pas à faire un retour sur les problèmes que vous rencontrez pour que ces derniers soit également corriger pour la prochaine version.

Nous allons détailler ci-dessous les différentes amélioration incluse dans cette version.

Lire la suite...

mercredi, février 18 2009

XINX - Editeur de feuille de style

Bonjours à tous,

Ce billet, parle de XINX, un logiciel libre que j'ai développé et que je continue à développer sur mon temps libre. Le but de se billet est de présenter XINX et d'être le début d'une longue série de billet parlant de son développement.

En effet, même si le programme est propre à une utilisation particulière pour un cercle de personne restreint, les méthodes, classes, et idées utilisées dans ce programme peuvent intéresser d'autres personnes.

Nouvelle version de XINX

Lire la suite...

dimanche, octobre 19 2008

Nouvelles fonctionnalités de Qt Designer 4.5

Sur TrolltechNokia Labs Blogs, Friedelann Kleint nous présente aujourd'hui les nouvelles fonctionnalités de Qt Designer 4.5[1].

Au menu, on peut trouver l'ajout de filtre sur l'éditeur de propriétés ainsi que sur l'inspecteur d'objet (Ce qui peut permettre de sélectionner un composant et d'en modifier les propriétés plus rapidement).

objectinspector.png

propertyeditorfilter.png

L'arrangement de la boite à outil est également différent :

widgetbox_iconmode.png

De plus il est maintenant possible de :

  • Sélectionner l'objet ancêtre d'un widget en sélectionnant Select ancestors du menu contextuel.
  • Changer le Layout sans casser et reconstruire le Layout de la feuille
  • Ajouter facilement une nouvelle ligne au layout (L'action Add form layout row ouvrant la boite de dialogue ci-dessous)
  • Créer des Assistants (Wizard) linéaires
  • Désactiver la traduction de certaine chaîne.
  • ...

formlayout.png

Enfin, pour terminer, comme le dit Friedemann : The general focus of the 4.5 release is on stability and performance. Soit : Le but principal de la version 4.5 est la stabilité et les performances.

Pour plus de précision, je vous conseille d'aller voir la page d'origine et/ou de télécharger la snapshot.

lundi, octobre 6 2008

QT 4.4.2 puis QT 4.4.3 sont sorties

En une semaine sont sortie les versions 4.4.2 et 4.4.3 de Qt.

La version 4.4.2 corrige de nombreux bugs (dont des fuites mémoires sur la partie XmlPatterns). Vous pouvez trouver la listes des changements attachée au billet, ou dans l'archive Qt se trouvant sur le site Trolltech.

La version 4.4.3[1] modifie chaque entête de fichiers, les icônes, ... pour refléter l'achat de Trolltech par Nokia. Par la même occasion le site de Trolltech a été complètement refait (http://trolltech.com).

Donc si vous avez la version 4.4.2, il n'est pas nécessaire de récupérer la 4.4.3 (sauf si vous souhaiter absolument la dernière version au nom de Nokia), par contre si vous êtes encore à la version 4.4.0 ou 4.4.1, il peut être intéressant d'installer la dernière version (suivant les fonctionnalités que vous utilisez).

Enfin, la question, sans réponse, est, est-ce que le site de Trolltech et de Nokia vont fusionner ou vont-il rester séparer[2] ?

Notes

[1] http://trolltech.com/about/news/qt-4.4.3-released

[2] ce dernier est tout de même plus pratique, je trouve

lundi, septembre 8 2008

Paquet Debian et Qt

A titre personnel je fabrique quelques programmes en Qt. Comme j'utilise un système Gnu/Debian, j'ai cherché à fabriquer des paquets pour mon système (plus pour le plaisir qu'autre chose, car la plus grande partie de mes utilisateurs sont sous MS/Windows).

Ce billet explique la création de paquet Gnu/Debian pour des applications Qt 4 utilisant QMake

Lire la suite...