QGis-QTCreator : Créer son formulaire dans QGis

Je viens de découvrir un moyen génial et simplissime pour créer ses propres formulaires dans QGis:

Ce tutoriel est très fortement inspiré de celui-ci : http://rootabagis.blogspot.com/2010/06/des-formulaires-personnalises-pour-qgis.html

Mais il est adapté aux Narchéologues soucieux d’avoir de jolis formulaires pour enregistrer leurs données:

le formulaire dans QGis

Un exemple de formulaire pour l’enregistrement des faits archéologiques dans QGis

1) Télecharger le logiciel QTCreator:

Nous allons tout d’abord télecharger QTCreator en suivant l’adresse suivante : http://sourceforge.net/projects/qtcreator.mirror/files/qt-creator-win-opensource-2.4.1.exe/download

Note: ce tutoriel est réalisé avec la version 2.4.1 de QtCreator qui n’est pas la dernière version (actuellement 2.6.0) pour suivre pas à pas ce tuto suivez le lien ci-dessus. si vous voulez vous lancer avec la dernière version c’est ici http://qt-project.org/downloads#qt-creator

2) Créer son formulaire avec QTCreator:

2.1) Créer un nouveau projet:

Fichier > Nouveau Fichier ou Projet…

fenêtre: nouveau projet

Dans la fenêtre qui s’ouvre choisir dans ‘Fichiers et classes’ >: ‘Qt

Puis dans ‘Classe d’interface Qt Designer’ : ‘Interface graphique Qt Designer

Choisir…

nom du fichier et emplacement

Choisir le nom de son formulaire, ici: Form_Faits.ui et son emplacement

Suivant

Terminer

2.2) Présentation de l’interface graphique du formulaire:

fenetre Qt Creator

Voici la fenêtre de QTcreator:

en 1, le formulaire que l’on est en train de créer avec par défaut les boutons OK et Annuler.

en 2, les contrôles que l’on va ajouter par ‘glisser-déposer’ dans le formulaire.

en 3, le récapitulatif des contrôles et de tous les éléments du formulaire.

en 4, la fenêtre de propriétés des éléments du formulaire (c’est là que l’on définit les paramètres des objets ajoutés dans le formulaire).

2.3) Ajouter le titre du formulaire:

A : Glisser-Déposer le contrôle Label contrôle "label"depuis la fenêtre des ‘contrôles’ (colonne de gauche) jusqu’au formulaire.

Puis double-cliquer dans la fenêtre créée puis taper le titre du formulaire, ici ‘Enregistrement des Faits’

Enfin modifier l’apparence en agrandissant le cadre (B) et en changeant la couleur (C) et la police de caractère (D).

insérer un titre

2.4) Ajouter les étiquettes des champs du formulaire:

De la même manière, on ajoute les étiquettes des champs qui nous intéresse en faisant 4 fois un Glisser-Déposer du contrôle Label.

Ici les étiquettes seront ‘N° de Fait‘, ‘Type de Fait‘, ‘Diam-Long‘ et ‘Largeur

Label

On les redimensionne, on les met en forme avec les outils dans la barre grise au dessus du formulaire, puis on les met en 14 et en gras.

2.5) Ajouter les champs ‘N° de Fait‘, ‘Diam-Long‘ et ‘Largeur‘:

Glisser-Déposer le contrôle Line Edit contrôle "line edit" autant de fois qu’il y a de champs (ici 3 fois, pour ‘Type de Fait‘ on fera un menu déroulant) dans le formulaire.

Puis comme pour les Labels, mettre en forme avec les outils de la colonne de droite (Police et couleur, ici en 14 et Gras)

Aligner proprement les champs et les étiquettes correspondantes avec les outils évoqués précedemment.

Enfin, il faut mettre dans objectName (colonne de droite) le nom du champ correspondant au nom du champ dans la table attributaire que l’on souhaite remplir sous QGis

Pour ‘N° de Fait‘ : idobject, pour ‘Diam-Long‘: et pour ‘Largeur‘:

2.6) Ajouter un menu déroulant pour ‘Type Fait:

Glisser-Déposer le contrôle Combo Box Combo Boxdans la fenêtre formulaire en face deType Fait

Mettre en forme: alignement, police, couleur

Ne pas oublier de nommer l’objectName = Type

A noter: On peut cocher la case editable, pour rendre le champ éditable (pour pouvoir ajouter d’autres valeurs que celles prévues dans la liste déroulante)

On peut aussi ici définir les éléments de la liste déroulante (Clic droit sur la Combo Box > Editer les éléments… et ajouter des occurrences avec le signe +) mais nous le ferons depuis QGis

2.7) Ajouter une image (pour faire joli!):

Glisser déposer un contrôle Label Labeldans le formulaire

Dérouler la colonne de droite, et dans le sous menu vert ‘QLabel‘, chercher son fichier image dans le champ ‘pixmap

pixmap et scaled contents

Redimensionner la fenêtre qui va accueuillir l’image et cocher la case ‘scaledContents‘ (juste en dessous de ‘pixmap‘) pour adapter l’image au contenant..

2.8) Affiner sa mise en page et c’est fini !!

Ou presque, il faut enregistrer son projet dans un dossier que l’on retrouvera plus tard… tant qu’à faire !

formulaire mis en page

3) Attacher le formulaire à sa table dans QGis:

3.1) Créer un nouveau shapefile:

Ouvrir QGis

Menu Couche > Nouveau > Nouveau Shapefile…

On crée ici un nouveau shapefiles de polygone

Avec dans la table attributaire les champs qui correspondent à ceux créés dans le formulaire (que l’on a spécifié à chaque fois dans objectName)

C’est à dire id (créé automatiquement et qui correspond au N° de Fait, Type, Diam_Long et Larg en spécifiant le type de chacun a bon escient.

Nouveau shapefile

Enregistrer le shapefile sous Faits.shp

3.2) Paramétrer le menu déroulant pour le champ ‘Type‘ (Type de Fait):

Le shapefile est créé est apparaît dans la liste de couche (colonne de gauche)

Faire un clic droit > Propriétés

Puis dans l’onglet ‘Champs‘, clic droit sur le bouton ‘Edition de ligne‘ qui correspond au champ ‘Type

Edition de ligne

Dans la boîte de dialogue qui s’ouvre, choisir Liste de valeurs

liste de valeurs

Créer sa liste de valeur puis OK, puis Apply > OK

valeurs menu déroulant

A Noter: les valeurs de la colonne ‘Valeur‘ sont celles qui apparaîtront dans la table attributaire de QGis, il faut donc éviter les accents et caractère « spéciaux » (ici Sepulture et Fosses n’ont pas d’accent); En revanche le valeurs de la colonne ‘Description‘ sont celles qui apparaîtront dans le menu déroulant, a priori les accents sont autorisés…(ici Sépulture et Fossé)!!

3.2) Rattacher le formulaire créé sous QTCreator à sa table Faits:

Clic droit sur le shapefile ‘Faits‘ > Propriétés

Puis dans l’onglet ‘Général‘ > Spécifier dans le champs ‘Editer interface‘ le chemin de votre formulaire qui se nomme Form_Faits.ui si vous avez bien suivivi ! 😉

parcourir Form_Faits.ui

3.3) Enfin le résultat de nos efforts surhumains…

Rendre le shapefile ‘Faits‘ éditable : un clic sur le shapefile puis sur l’outil édition édition

Dessiner une forme (un fait en l’occurrence) après avoir activé l’outil Créer un polygone créer un polygone (en finissant la forme par un clic droit)

Et, chose extraordinaire…..notre tout beau – tout nouveau formulaire est prêt à l’emploi!!!

le formulaire dans QGis

Pour finir, créer quelques formes avec des attributs puis vérifier dans la table attributaire que vos données ont été bien enregistrées: (Clic droit sur le shapefile > Ouvrir la table d’attributs…)

table attributaire

Voili, Voilà alors vous avez suivi jusqu’au bout ?! N’hésitez pas à laissez vos commentaires et notamment vos expériences avec QTCreator et QGis… avez vous essayé d’ajouter de nouveaux contrôles (calendrier, compteur….) ? avez vous découvert des perles dans les paramètres des contrôles… Dites-moi tout !!!

Epilogue:

Si vous êtes arrivés jusqu’au bout de la démarche, peut être avez vous découvert que ce superbe formulaire d’édition ne s’ouvre qu’à la création de votre entité… pour résoudre ce problème et faire apparaître le formulaire avec un simple clic:

– Menu ‘Préférences’ > ‘Options’

– Dans la fenêtre qui s’ouvre cocher la caseOuvrir le formulaire si une seule entité est identifiée

– Il suffit dorénavant de cliquer sur l’entité avec l’outil info bouton info

– Pour modifier l’entité via le formulaire il aura suffit de rendre la couche éditable avec le bouton mode édition édition

Publicités

20 réflexions sur “QGis-QTCreator : Créer son formulaire dans QGis

  1. […] Un super article qui reprend pas à pas comment créer un formulaire complètement personnaliser avec Qgis : https://archeomatic.wordpress.com/2012/03/06/qgis-qtcreator-creer-son-formulaire-dans-qgis/#more-71 […]

  2. Farhat dit :

    Bonjour,
    Tout d’abord je vous remercie pour le tutoriel, franchement j’ai besoin d’aide, je cherche à crée un bouton au menu barre de QGIS, sa sera sympa de votre part si vous m’aider.
    Bien cordialement,
    Farhat

    • archeomatic dit :

      Désolé je ne suis pas assez calé en programmation et même un ignare de ce coté…. Or je pense qu’il faut passer par la pour créer un bouton dans QGis.. vous pouvez jeter un coup d’oeil de ce coté : http://softlibre.gloobe.org/qgis/workshop/plugin
      ou poser votre question sur forumsig et/ou georezo !!
      Faites moi signe si vous avez une réponse…et peut être un futur tutoriel pourle blog archeomatic 😉

      • Farhat dit :

        pour ce tutoriel a l’étape 3.3) Enfin le résultat de nos efforts surhumains…
        je n’est sait pas pour quoi l’outil Créer un polygone n’affiche pas sur mon barre de menu? et merci

  3. archeomatic dit :

    Peut-être un clic droit sur la barre de menu (pas sur un icône) et cocher la case « Numérisation » pour avoir les outils de bases de la numérisation dont creer un polygone (si tu as un shapefile de polygone bien sur)…

  4. Juliano33 dit :

    Tuto très instructif et très bien fait, bravo!

    Savez-vous s’il est possible d’attribuer le champ d’un autre couche d’informations par rapport au positionnement du point créé via le formulaire? (copier l’identifiant d’une polyligne dans une colonne au moment du clic pour créer le point)

    Plus en rapport avec le formulaire personnalisé, j’ai suivi et adapté vos instructions. Au final, j’obtiens mon formulaire personnalisé (lié à la table de ma couche QGis… parfait donc!) mais un champs s’est intégré en haut à gauche du formulaire (il s’agit d’un champ date où apparaît un calendrier lorsque je clique dessus). J’ai bien un champ date dans ma table QGIS mais celui-ci est bien lié au champs date présent dans le formulaire fait sous Qt.
    Le champ qui s’est intégré sans mon accord n’est présent ni dans mon fichier ui ni dans ma table de données… Sauriez-vous d’où cela peut provenir?

    • archeomatic dit :

      Bonjour,
      je suis désolé car je suis dans l’incapacité de répondre a vos deux questions:

      – comme ça tout de suite je ne vois pas comment remplir automatiquement une table attributaire d’un point d’après sa position, en temps réel … cela revient a faire une jointure spatiale mais en live, c’est ça ?!

      – je n’ai pas réutilisé le formulaires QT depuis un bail… Mais je me rappelle que j’avais des problèmes avec l’insertion des champs date …

      =>le mieux serais de se renseigner auprès des forums spécialisés (ForumSIG et GeoRezo)
      PS: Si vous obtenez des réponses et des résultats cela m’intéresse et je pourrais alors compléter le tuto… 😉
      Courage à plus..

      • Juliano33 dit :

        C’est effectivement une jointure spatiale en live que j’essaye de réaliser… sans résultat pour le moment.

        Concernant le champ date calendrier présent uniquement sur le formulaire, il s’agit du type de donnée réglé dans sous Qgis dans Propriété -> Onglet Champ -> Colonne Outil d’édition. J’avais réglé ma colonne Date sur Calendrier (faisant ainsi apparaître un calendrier dans mon formulaire en plus de mon champ date lié au formulaire Qt). En modifiant le type de donnée, le calendrier disparaît.

        Pour ce qui est de la prise en compte du format date sous Qgis, il faut a priori nommer la colonne de la couche: Date. J’ai laissé le format par défaut (string longueur 100). Le format de date est ensuite reconnu juste en faisant cette opération. Je ne sais pas ce qui se passe dans le cas de plusieurs champs date dans la même couche…

      • archeomatic dit :

        Merci pour les précisions.. qui me serons surement utile à l’avenir!

  5. Cyril Bernard dit :

    Bonjour,
    merci pour ce tutoriel. Quelle version de QtCreator avez-vous utilisée ? Il semble que la version stable actuelle (2.6 au moment où j’écris) ait pas mal changée par rapport aux explications du tuto.

    Bonne fin de journée, Cyril

    • archeomatic dit :

      Salut Cyril,
      désolé pour la réponse tardive mais je n’avais plus l’info sous la main (enfin la souris) : le tuto a été réalisé avec la version 2.4.1 de QtCreator… et effectivement la version a changée (et par conséquent le lien de téléchargement vers la version 2.4.1 aussi, c’est rectifié). La dernière version open-source à ce jour semble être la 2.6.0 que je n’ai pas encore testée… je regarderais cela de plus près un jour prochain….

  6. Marion dit :

    Bonjour,

    Savez-vous par hasard comment paramétrer la valeur par défaut pour les menus déroulants ? J’ai en effet suivi la procédure que vous détaillez et sur QGIS, quand je remplis ma table, pour les champs en menu déroulant, la première valeur dans l’ordre alphabétique se met par défaut. Or, j’aimerais qu’il n’y ait pas de valeur par défaut (champ vide par exemple) ou en choisir une parmi la liste éventuellement. Avez-vous une idée ?
    Merci en tous cas pour le tutoriel qui est très clair !

    • archeomatic dit :

      Marion,
      je suis désolé car à l’époque de la rédaction de l’article je crois bien que j’avais le même problème ;(
      je n’ai pas eut le temps de m’investir plus avant dans la création de formulaires Qgis avec QT….
      je suis bien entendu intéressé par la suite de ta recherche sur le sujet..
      courage

    • CGuillaume dit :

      Une solution vraiment pas très rigoureuse en matière de Base de Données mais qui peut faire l’affaire visuellement…
      C’est de créer une valeur avec un espace dans la liste des valeurs ou de créer une valeur « NULL » avec une espace  »  » comme description.

      Pour l’instant c’est les seules solutions que j’ai trouvé…

    • mgx dit :

      Bonjour,
      Est-ce que vous avez trouvé la solution? J’aimerai faire la même chose…

  7. afef dit :

    slt Je travaille sur un projet  » réalisation d’un interface entre la base de donnée GTO sur ( SQL serveur ) et le schéma unifilaire de la STEG de réseaux de distribution HTA ,  »
    l’interface permettra d’afficher les informations descriptives des éléments du schéma unifilaire à partir de la base de donnée GTO
    GTO : c’est un gestion technique d’ouvrage

    • archeomatic dit :

      Super,
      Merci du retour !
      N’hésitez pas a regarder aussi la gestion des formulaires intégrés (depuis QGIS 2) en glisser-déposer avec intégration des photos entre autre… Le tout dans clic droit > propriétés > champs (en au à droite).
      Par contre je n’arrive pas pour l’instant à mêler les 2 : solution native et qt creator.
      Un jour viendra peut être ou je me mettrais au python et ferais des interfaces super jolies et avancées depuis QGIS…
      Si tas un imprim écran de ton formulaire.. N’hésites pas.
      Au plaisir

  8. Vianney dit :

    Merci pour ce tuto très intéressant.
    Je me permets de te signaler une petite coquille en 2.6 et 3.1 : tu parles de « objectid » au lieu de « objectName ».

  9. Jonathan dit :

    Bonjour, et merci pour ce tuto très intéressant. J’ai une petite question. J’ai crée un formulaire dans QT creator, que j’ai ensuite rattaché à un shp déjà existant de polygones. Ma fenêtre de dialogue s’affiche correctement, mais même lorsque je suis en mode édition, les données que je rentre dans la fenêtre QT ne sont pas automatiquement transmises dans ma table attributaire, et vice versa.
    Pourriez-vous m’aider ?
    Cordialement.
    Jonathan.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :