Codes sources Qt

Ajouter un nouvel élément

Les performances du mois

Des livres
2
Démineur
1
Snake
3

ang Des livres

Éditeur : Nokia + 7 Kio
Une interface de gestion de livres, basée sur le module QtSql et les capacités de modèles/vues.

ang Un navigateur avec QtWebKit

Éditeur : Nokia + 96 Kio
Un simple navigateur exploitant les possibilités du module QtWebKit.

ang Un éditeur de réseau de places et transitions (RdP)

Licence : GPL
Un réseau de places et transitions est un réseau de Petri (Petri Net ou RdP) généralisé et non coloré (sans extensions).

L'application PTNET Editor permettra de dessiner/editer graphiquement un tel réseau, de l'animer, de l'analyser en construisant et visualisant son graphe de couverture/accessibilité, de le convertir en fichier image et de le sauvegarder en tant que document PNML.

1. Compiler l'application

L'application a été développée et testée sous GNU/Linux OpenSUSE 12.3 (KDE). Elle est basée sur le Framework Qt 4.8.4 et utilise aussi:
  • Boost Graph Library 1.49 (BGL) pour construire le graphe de couverture/accessibilité d'un RdP (graphgenerator.cpp)
  • la bibliothèque GraphViz 2.28 pour visualiser le graphe convenablement (graphvisualizer.cpp).

=> Vous devez installer ces bibliothèques pour compiler le code source!

Important: Pour éliminer les deux étapes suivantes (étape 2 et 3) et tester l'application directement, consultez le
fichier source tabwidget.cpp et commentez les étape [0], [1] et [2] de la méthode bool validateXml(QFile& file, MessageHandler &messageHandler). Autrement dit, modifiez cette méthode pour qu'elle retourne toujours true indiquant que le document PNML est valide.

2. PNML

PNML (Petri Net Markup Language) est un format standard d'échange des réseaux de Petri. L'application est basée sur ce standard. Vous pouvez télécharger le grammaire (spécification) de ce language ici: http://www.pnml.org/grammar.php.

Notre application est un éditeur des RdP sans extensions. Donc nous somme pas besoin de tous les fichiers de grammaire téléchargé. On va juste utiliser 4:
  • pnmlcoremodel.rng : Contient la définition de PNML Core Model.
  • ptnet.rng : Contient les déclarations des types ajoutées par les réseau de places et transitions : initialMarking (marquage initial d’une place) et inscription (poids d’un arc).
  • anyElement.xsd : Utilisé pour définir une grammaire non fournie par le standard PNML. Dans notre cas ceux sont les éléments ToolInfo.
  • conventions.rng: utilisé par ptnet.rng.

3. Convertir les fichiers RNG

Le grammaire PNML est décrit en langage RELAX NG (.rng). Celui ci est un langage de description de document XML alternative de XML Schema. RELAX NG n’est pas supporté par le module XML de la bibliothèque Qt. Donc on doit convertir les fichiers de format RNG en format XSD! A ce propos, on va utiliser l'outil Trang.

Trang est un outil libre permettant de convertir des schémas RELAX NG en XML Schema. Vous pouvez le télécharger ici:http://code.google.com/p/jing-trang/downloads/list.

Convertir les fichiers rng en des fichiers xsd ?

1. Dans le répertoire /home/~Download/Trang, créez un dossier et le nommez rng.
2. Créez un autre dossier dans le même répertoire /home/~Download/Trang et le nommez xsd.
3. Copiez les 4 fichiers rng dans le dossier rng.
4. Pour convertir les 4 fichiers, utilisez la commande : java -jar trang.jar -I rng -O xsd rng/ptnet.rng xsd/ptnet.xsd.
5. les fichiers RNG sont maintenant convertis en fichiers XSD et copiés dans le dossier xsd.

L'application va utiliser les 4 fichiers xsd pour valider un document PNML décrivant un RdP !

Donc, vous devez procéder comme suit:

6. Copier les 4 fichiers xsd dans le répertoire : ptnet/shemas
7. Modifier le fichier anyElement.xsd en supprimant la balise xs:group et en ajoutant la balise contenue dans le fichier ptnet/shemas/anyElement.txt

4. Tester l'application

Une fois l'application est compilée et les fichiers XSD sont générés (étapes 1-5) et ajoutés au répertoire /ptnet/shemas et modifiés (étapes 6-7), vous pouvez le tester en utilisant les exemples contenus dans le dossier ptnet/examples.
  • Pour changer les attributs d'une Place, Transition ou un arc faite un double-clique sur l'élément correspondant.
  • Pendant l'animation d'un RdP et pour franchir (tirer) une transition faite un clique gauche sur elle.




Bonne utilisation :)

ang Géolocalisation avec GoogleMaps

Licence : Autre
Quand dans vos données vous avez écrit :
1, rue de la halle 50500 Carentan
Vous vous dites intérieurement : je sais où cela se situe... mais ne serait-ce pas mieux de le voir sur une carte ? Vous pouvez utiliser un webservice Google pour cela.

ang Dessiner des objets OpenGL dans une fenêtre

Licence : Autre
Le code OpenGL pour afficher un rendu à l'écran ne change pas avec QtOpenGL, il suffit de le mettre au bon endroit.

L'article associé

ang ImageAnalyzer

Licence : Autre
But
===============
Petite application mobile et PC permettant de retrouver ses amis sur les réseaux sociaux par leur photo.

Contexte
===============
Cette application est très basique (la comparaison des photos se fait pixels par pixels)
Elle est juste faite pour montrer comment développer une application avec Ubuntu SDK
et l'installer sur le système mobile Ubuntu Touch.

Contenu
=============
Elle est développée en QML/Javascript et C++

Exécutable
=============
on a un exécutable pour Ubuntu 13.10 et deux pour le système mobile Ubuntu Touch.

ang Décompression de fichiers .tar.xz

Licence : Autre
Voilà un mini projet wrapper entre xz et Qt avec un petit bout de code pour décompresser les archives .tar.xz avec/sans crc32 (voir QXzDecode.h). Support en QDataStream ou QByteArray. Il permet d'avoir un décompresseur minimum ; sachant que xz se base sur lzma2, le format est très performant.

Dans mon cas, ça me sert pour faire un plug-in étant en réalité une archive multi-fichiers.

Dans l'avenir je referai tout en Qt pour compresser et optimiser le code.

ang Création d'une fenêtre personnalisée

Licence : Autre
Est-il possible de modifier l'aspect de ma fenêtre avec Qt ? La réponse est oui mais pas directement. En effet, ce n'est pas Qt qui gère la fenêtre mais le window manager sous-jacent (Windows, KDE, Gnome, Xfce, MacOS X...).

La souplesse de Qt va nous permettre de contourner le problème afin de ne pas se soucier du window manager. N'étant pas évidente de prime abord, la solution utilise pourtant les fonctionnalités de base de Qt et plus particulièrement de QWidget. Cet article introduit ma façon de faire (il en existe surement d'autres) qui, je l'espère, est simple et suffisamment efficace pour s'adapter à tout type de projet.

Vous pouvez lire le tutoriel associé.

ang Contactes Book

Licence : Libre
Cette application est codé en Cpp + Qt 4 .
elle vous permet de sauvegarder des informations sur vos contactes tél que :
-nom -e-mail -phone -photo (si existe) -adresse -job -plus
et vous offre une gestion complète de vous contactes (Ajout,Modification,Suppression)

ça vous permet de voir l'utilisation des fichiers et des Widgets on Qt 4.
aussi des boite de dialogue personnalisé.

ang Info-bulles

Licence : GPL
Dans un de mes projets, j'ai créé un système d'infos-bulles qui s'affichent pour donner des informations sur certains des composants de ma fenêtre.
Je trouve ça très utile pour créer une sorte de didacticiel. Du coup, j'aimerai partager ma création avec vous.

Une info-bulle se compose d'un titre, d'un texte et éventuellement d'un icône. L'icône peut être soit ceux de base utilisés par Qt (notamment pour les QMessageBox), soit un QPixmap.
Il est possible d'indiquer une durée d'affichage en millisecondes. Une fois ce temps écoulé, la bulle va commencer à disparaître. Si l'utilisateur repasse le curseur sur la bulle avant qu'elle ne s'efface entièrement, la bulle reprend son opacité d'origine.
Une durée d'affichage égale à -1 implique que la bulle ne se fermera pas automatiquement. L'utilisateur devra, alors, appuyer sur le bouton de fermeture.

Si vous indiquez un widget parent à une bulle, elle pointera automatiquement vers son centre. Elle le suivra même si vous déplacez ou redimensionnez votre widget (ou ses parents). Vous pouvez également placer la bulle avec la méthode move(QPoint).
Par contre, attention : c'est le bout de la flèche qui sera à cette position.
La flèche se place automatiquement en haut à gauche de la bulle quand cette dernière est dans la partie supérieure gauche du bureau, en bas à gauche dans le coin inférieur gauche et pareil pour la droite du bureau.

ang Lecture de fichiers LZMA avec QIODevice

Licence : Autre
Comment dériver de QIODevice ? Comment compresser des données avec un algorithme très puissant mais libre en utilisant Qt ? En regardant de plus près cette source : elle vous présente la manière de dériver de QIODevice pour compresser des données à l'aide de LZMA.

Voir aussi le SDK LZMA (licence libre) (850 Ko)

ang Un interpréteur avec des expressions régulières

Licence : Autre
Cet interpréteur se présentera sous forme d'une boîte de saisie, où l'utilisateur pourra entrer différentes commandes qui généreront des "morceaux" de code C++, de manière à simplifier le travail du programmeur. Commençons par établir une liste des commandes reconnues :

un ensemble de commandes destinées à la gestion des fichiers, sous la forme FILE_xxx ;
un ensemble de commandes destinées à la gestion des chaînes de caractères, sous la forme STRING_xxx.

ang ViewExif

Licence : Libre
Sources en c/c++ avec utilisation de la bibliothèque Qt d'un petit programme de visualisation des données Exif d'une image. Pour sélectionner le fichier sur le disque on utilise un QTreeView associé à un QFileSystemModel.

ang Un lecteur multimédia avec Phonon

Licence : Autre
Un exemple complet de lecteur audio réalisé avec Phonon.

ang DomElementContainer

Éditeur : Witold Wysota + 2 Ko
Il est assez fréquent d'écrire du code itérant sur un document XML, effectuant des actions précises sur les éléments avec des tags spécifiques. Habituellement, on le fait comme suit :

for(QDomElement elem = parent.firstChildElement("tag");
!elem.isNull();
elem = elem.nextSiblingElement("tag")){
doSomething(elem);
}

C'est bien mais ce serait mieux d'utiliser le foreach de Qt, non ? Eh bien, c'est ce que ceci vous pemret de faire !

ang Un color picker (version QML)

Licence : Autre
Il répond à la même question que la version C++ mais en QML, avec le tout nouveau Qt Quick.

ang Envoyer des événements clavier ou souris

Licence : Autre
Voici un projet QWidget, contenant 3 boutons associés à 3 cases à cocher, permettant d'envoyer d'automatiser des frappes clavier ou des clics souris simplement en survolant des boutons. Il est destiné à servir d'exemple pour créer sa propre interface de raccourcis.

Premièrement, les boutons héritent de QPushButton pour ajouter le support du "mouse over" (survol par le curseur), avec la fonction d'auto-répétition liée.
Fonctions des boutons :
  • Le premier bouton appui sur "C" en le survolant et relâche cette touche virtuelle en sortant le curseur du bouton. En cochant Auto, on répète rapidement l'appui sur le C, imitant un vrai clavier. A tester sous un éditeur de texte par exemple.
  • Le deuxième bouton tape "CV".
  • Le troisième bouton tape C et V de façon plus temporisée.
  • En cliquant sur n'importe quel bouton, la souris va faire toute seul un clic légèrement en haut à gauche de sa position actuelle. A tester sous Paint par exemple.


La fenêtre n'a pas de bordure, un fond légèrement transparent qui permet de la déplacer, et reste au premier plan sans prendre le focus, ce qui permet d'agir sur une autre application.

Ces fonctionnalités ne sont pas accessibles depuis Qt, et nécessitent l'utilisation de l'API Windows.

ang powerspectrum

Licence : Libre
Sources en C/C++ d'une application graphique basée sur la bibliothèque Qt calculant et affichant le spectre de puissance du signal provenant de l'entrée de la carte son du pc.

ang Sidebar

Licence : Gratuit pour usage non commercial
Un widget tout simple qui permet d'ajouter des actions et de les présenter de la même façon que les deux applications citées dans la description courte.

ang Exemple d’utilisation de la technique d'instanciation

Licence : Libre
L'instanciation est une technique permettant de dessiner plusieurs copies du même objet. Cette technique sera intéressante dans des scènes contenant des objets similaires : une forêt d'arbre, le feuillage d'un arbre, une foule, l'herbe d'une pelouse.
Cet article de mon blog présente un exemple d'utilisation de l'instanciation: la technique d'instanciation

46 éléments

 
 
 
 
Partenaires

PlanetHoster
Ikoula