Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2203 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Qt et Xml

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Qt et Xml

n°1505624
melie9
Posté le 21-01-2007 à 18:36:36  profilanswer
 

Bonjour, je viens vous dmander de l'aide car là je bloque vraiment.
 
Mon niveau en programmation est plutot faible. Je dois réaliser une aide d'un logiciel.
Donc comme tout logiciel, l'aide a une partie à gauche avec des "liens" et une partie à droite. Quand on clique sur un des "liens" , le texte correspondant apaprait dans la aprtie à droite.
 
Vous voyez jusque là?
 
Je réalise l'interface de l'aide avec Qt : à gauche un TreeWiew, et à droite un TextEdit vide pour le moment.
 
Je dispose aussi d'un fchier xml que j'ai créé :
 

Code :
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <Help>
  3. <Content name='objects'> text about the objects</Content>
  4.       <Content name='help2'> text about shortcuts</Content>
  5. <Content name='help3'> text of help3
  6.       </Content>
  7. <Content name='help4'> text of help4
  8.       </Content>
  9. <Content name='help5'> text of help5
  10.       </Content>
  11.      
  12. </Help>


 
 
 
Il est assez simple.
Mais voilà je ne sais pas du tout comment faire la liaison, de quand je clique le texte qui correspond apparait.
J'ai regardé deja sur des sites, des exemples, mais je ne comprend rien.
 
Quelqu'un pourrait m"aider?

mood
Publicité
Posté le 21-01-2007 à 18:36:36  profilanswer
 

n°1505627
IrmatDen
Posté le 21-01-2007 à 18:48:21  profilanswer
 

Vu que tu dis que ma réponse était vague, qu'est ce que tu n'as pas compris?

n°1505629
melie9
Posté le 21-01-2007 à 18:52:04  profilanswer
 

Je comprend le principe de ce que tu me dis, mais à coder, c'est flou pour moi.
 
J'ai d'un coté mon code généré de l'interface Qt, de l'autre mon fichier xml, mais je ne sais pas ce que je dois ecrire niveau code.
 
J'ai essayé de regarder des exemples mais je comprend rien.

n°1505631
IrmatDen
Posté le 21-01-2007 à 18:56:28  profilanswer
 

Ah, on avance :)
Puisque tu utilises le designer, il faut que tu commences par apprendre comment te servir des fichiers d'interfaces.
Après, c'est une histoire de signaux/slots...

n°1505653
melie9
Posté le 21-01-2007 à 17:59:21  profilanswer
 

Bonjour, je viens vous dmander de l'aide car là je bloque vraiment.
 
Mon niveau en programmation est plutot faible. Je dois réaliser une aide d'un logiciel.
Donc comme tout logiciel, l'aide a une partie à gauche avec des "liens" et une partie à droite. Quand on clique sur un des "liens" , le texte correspondant apaprait dans la aprtie à droite.
 
Vous voyez jusque là?
 
Je réalise l'interface de l'aide avec Qt : à gauche un TreeWiew, et à droite un TextEdit vide pour le moment.
 
Je dispose aussi d'un fchier xml que j'ai créé :
 

Code :
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <Help>
  3. <Content name='objects'> text about the objects</Content>
  4.       <Content name='help2'> text about shortcuts</Content>
  5. <Content name='help3'> text of help3
  6.       </Content>
  7. <Content name='help4'> text of help4
  8.       </Content>
  9. <Content name='help5'> text of help5
  10.       </Content>
  11.      
  12. </Help>


 
Il est assez simple.
Mais voilà je ne sais pas du tout comment faire la liaison, de quand je clique le texte qui correspond apparait.
J'ai regardé deja sur des sites, des exemples, mais je ne comprend rien.
 
Quelqu'un pourrait m"aider?

n°1505654
IrmatDen
Posté le 21-01-2007 à 18:28:42  profilanswer
 

Salut,
 
Il faut que tu connectes le signal correspondant à la sélection dans le QTreeView (ie QAsbtractItemView::activated()) à un slot personnalisé qui se chargera d'afficher le texte correspondant à l'index fourni dans ton textedit.
Ca implique que tu ais une certaine connaissance de la programmation modele/vue de Qt.
 
Si tu ne prévois pas d'avoir plusieurs vue possibles de cette aide, tourne toi vers un QTreeWidget, en connectant un slot personnel le signal QTreeWidget::itemActivated.
 
Dans les 2 cas, il faut que tu conserves en mémoire les correspondances clés => données. Selon le choix de la méthode utilisée, ce ne sera pas de la même façon.
 
 
Par contre, c'est un problème de prog: C++ ou python (ou autre...), mais pas un problème de xml. Tu devrais déplacer ton post dans la catégorie de ton langage.

n°1505655
melie9
Posté le 21-01-2007 à 18:34:32  profilanswer
 

Oki merci pour la reponse meme si ca reste tres vague pour moi, pour ma ptite tete.
C'est en C++, je vais le poster là bas merci.

n°1505656
melie9
Posté le 21-01-2007 à 20:03:02  profilanswer
 

J'ai regardé les liens que tu m'as passé, merci.
 
Mais là je perd espoir, je dois etre vraiment abrutie c'est pas possible.
Je pige pas clairement ce que je dois mettre.
 
:s

n°1505679
IrmatDen
Posté le 21-01-2007 à 21:07:43  profilanswer
 

Bien, quelle approche as-tu choisi au niveau de l'intégration des fichiers .ui? Utilisation directe de l'interface par héritage simple, ou par héritage multiple?

n°1505735
melie9
Posté le 22-01-2007 à 00:15:51  profilanswer
 

si je dis que j'ai pas bien saisi la difference, je me fais lyncher??

mood
Publicité
Posté le 22-01-2007 à 00:15:51  profilanswer
 

n°1505738
IrmatDen
Posté le 22-01-2007 à 01:18:24  profilanswer
 

Non, pas du tout. Je te conseillerais juste d'aller lire des cours de C++ en premier (en particulier la partie sur l'héritage, au hasard), et de bien relire la page qui parle de l'intégration des fichiers .ui :P
 
Personnellement, je ne me sers jamais des .ui, je trouve le code suffisamment clair sans avoir besoin de le voir; je m'en sers surtout pour prototyper une interface.
Si je devais l'utiliser pour une fenêtre d'aide, je pencherais pour l'option héritage multiple.
Pour les connections, tu as l'option autoconnect, pour laquelle le nom des slots doit être formaté, et l'option connection manuelle que tu connais je suppose. (L'utilisation des slots façon auto connect est décrit dans la même page que celle expliquant l'utilisation des fichier ui, tout en bas.)
 
Dans le constructeur de ta classe, tu charges ton fichier xml dans un QHash<QString, QString> où le premier est la clé, par exemple 'objects' si on se refere à ton fichier exemple plus haut. La seconde chaîne est le texte lui correspondant, c-a-d "text about the objects" pour poursuivre l'exemple.
 
Une fois que tu as écrit ton slot (et éventuellement que tu l'as connecté au signal activated de ton arbre), tu va chercher dans ton conteneur la description pour la clé sélectionné, puis tu la mets dans le textedit.

n°1506344
melie9
Posté le 23-01-2007 à 14:24:37  profilanswer
 

Je croyais avoir posté une question ici tut à l'heure, j'ai du me tromper...
 
Bref, ne voulant pas rouvrir un post juste pour cette question, je poursuis sur celui là.
 
pour passer mon fichier ui en cpp et hpp (necessaires pour créer mes signaux et slots et faire d'autres modifs), j'avais créé un makefile, mais j'ai aussi lu qu'on pouvait faire :
 
uic fichier.ui fichier.h
 
par exemple, et quand je fais ca j'ai un message d'erreur qui me dit (too recent version of qt)
et du coup ca me crée bien le fichier .h mais vide.
 
comment faire?
 
j'aimerais juste à partir de mon ui, avoir mon cpp et mon hpp pour faire le reste.

n°1506367
IrmatDen
Posté le 23-01-2007 à 15:04:19  profilanswer
 

Le plus simple est de s'appuyer sur qmake. Dans ton .pro, tu mets FORMS += <tonui>.ui et le reste se fait tout seul ;)
 
Sinon, pour l'invoquer à la main pour une raison x, c'est uic -o fichier.h fichier.ui

n°1506377
melie9
Posté le 23-01-2007 à 15:22:03  profilanswer
 

Bon je suis désolée mais là faut dire que je me suis embrouillée moi meme.
 
Estce qu'on peut faire etape par etape :
- j'ai mon fichier aide.ui
- je veux un cpp et un hpp
- je tape qmake - project
- je tape qmake???
- je tape make???
 
 
je suis désolée mais là je suis embrouillée, entre les lignes de code à la main qui veulent pas se faire, le makefile qui est pas vraiment la bonne solution, et le qmake que j'ai du utiliser une fois je pige plus rien.
 
en plus c'est pas mon probleme principal, mais pour continuer je veux etre sur d'avoir bien mes deux fichiers cpp et hpp de bien faits.

n°1506395
IrmatDen
Posté le 23-01-2007 à 15:58:06  profilanswer
 

melie9 a écrit :

Estce qu'on peut faire etape par etape :
- j'ai mon fichier aide.ui
- je veux un cpp et un hpp
- je tape qmake - project
- je tape qmake???
- je tape make???


Exactement, c'est comme ça que ça marche, sauf si tu veux te compliquer la vie...

n°1506406
melie9
Posté le 23-01-2007 à 16:27:15  profilanswer
 

oki mais donc quand je fais le make, un message s'affiche :
 

Code :
  1. /usr/share/qt3/bin/uic Ui_help.ui -o Ui_help.h
  2. uic: File generated with too recent version of Qt Designer (4.0 vs. 3.3.6)
  3. make: *** [Ui_help.h] Error 1


 
et donc ca marche po, j'ai juste un makefile de génére un fichier .pro et un .h et c'est tout.

n°1506413
IrmatDen
Posté le 23-01-2007 à 16:40:46  profilanswer
 

Arf, tu développes avec Qt4 , mais la version utilisée pour compiler est Qt3, forcèment ça clash. Je ne suis pas sur linux, donc je ne pourrais t'aider sur ce point :/
 
Sur qtfr, section installation le probleme a déjà été abordé. Fais une recherche de ce côté et dis moi si tu as trouvé. Sinon, je verrais pour te choper les sujets qui en parle quand j'aurais un peu de temps.


Message édité par IrmatDen le 23-01-2007 à 16:41:03
n°1506414
melie9
Posté le 23-01-2007 à 16:45:06  profilanswer
 

oki merci je vais aller regarder ca!

n°1506505
melie9
Posté le 23-01-2007 à 22:09:26  profilanswer
 

Bon imaginons que je n'y arive pas, que j'en ai marre... et que je me dise bon bah je laisse tomber ma jolie fenetre d'aide avec un Tree et que je fasse de ma fenetre d'aide, une simple fenetre remplie de texte avec une scrollbar à droite, et donc plus rien de "vivant".
 
Ca parait tout de suite plus simple, mais tout de meme , je me pose des questions.
 
Est ce que je fais tout sur designer??? et aussi apres cette aide va s'integrer à une autre interface, à savoir quand on cliquera dans le menu aide ca ouvrira ma fenetre d'aide.
mais ce n'est pas les .ui qui rentrent en ligne de compte là? ca sera les fichiers .CPP et .hpp qu iseront manipuler pour ca?

n°1506525
IrmatDen
Posté le 23-01-2007 à 23:05:27  profilanswer
 

Tant que tu utiliseras le qmake de Qt3, tu ne pourras pas compiler du Qt4.
 
Alors soit tu fais un bon de 2 ans en arrière et tu utilises Qt3 seulement (au prix de la réécriture d'une partie de ton code), soit tu fais en sorte de pouvoir utiliser Qt4 ;)
Tu peux probablement faire un alias sur le qmake de Qt4 en l'appellant genre qmake4 (ou que sais-je...) et en le mettant dans le path.
Pour compiler, tu feras qmake4 && make au lieu de qmake && make.
 
Pour répondre à ta question, non, tu ne fais pas tout ça sur Designer; tu peux probablement y remplir ta zone de texte, mais les connect et les classes d'interface, faudra les coder, y'a pas le choix.

n°1507196
ChuckD
Posté le 25-01-2007 à 16:43:20  profilanswer
 

melie9 a écrit :

Bon imaginons que je n'y arive pas, que j'en ai marre... et que je me dise bon bah je laisse tomber ma jolie fenetre d'aide avec un Tree et que je fasse de ma fenetre d'aide, une simple fenetre remplie de texte avec une scrollbar à droite, et donc plus rien de "vivant".
 
Ca parait tout de suite plus simple, mais tout de meme , je me pose des questions.
 
Est ce que je fais tout sur designer??? et aussi apres cette aide va s'integrer à une autre interface, à savoir quand on cliquera dans le menu aide ca ouvrira ma fenetre d'aide.
mais ce n'est pas les .ui qui rentrent en ligne de compte là? ca sera les fichiers .CPP et .hpp qu iseront manipuler pour ca?


 
En supposant que tu laisses tout tomber, du moins l'utilisation du QTreeView (qui n'est pas triviale, je te l'accorde), il faudra bien tôt ou tard updater ton qmake :
qmake --version --> te donne Qt 3.3.6 :
Si tu as installé un Qt 4.x, tu dois avoir ton qmake sous /usr/local/Trolltech/Qt-4.x.x/bin/
Tu fais un petit ln -s /usr/local/Trolltech/Qt-4.x.x/bin/qmake /usr/bin/qmake, et c'est parti...
Après ce que je peux te conseiller si tu veux parser vite fait du Xml c'est de partir sur un truc à base de QDomDocument, QDomElement et QDomNode, et de gérer l'affichage autrement.
 
Sinon, un petit tuyau de rascal : vas checker le code source du playlist editor du freeplayer, c'est du Qt, ya du QTreeView, et c'est propre...Tu peux t'en inspirer.
 

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Qt et Xml

 

Sujets relatifs
[PERL] Ajouter des balises dans un fichier XMLManipuler des données XML
Afficher du XML sur une page HTML...[PHP] Analyse d'un fichier XML: confusion balises xml/html
[Java & XML] Parser SAX : comment ajouter un tag au cours du parsing ?Parser du XML en PHP
Problème de validation XML via DTDflash + XML et encodage des caractères japonais
[AJAX] Parsing d'un XML, lapin komprÿ ...Mettre à disposition du XML dynamiquement (et comment le lire)
Plus de sujets relatifs à : Qt et Xml


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR