Qt et Xml

Qt et Xml - C++ - Programmation

Marsh Posté le 21-01-2007 à 18:36:36    

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?

Reply

Marsh Posté le 21-01-2007 à 18:36:36   

Reply

Marsh Posté le 21-01-2007 à 18:48:21    

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

Reply

Marsh Posté le 21-01-2007 à 18:52:04    

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.

Reply

Marsh Posté le 21-01-2007 à 18:56:28    

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...

Reply

Marsh Posté le 21-01-2007 à 17:59:21    

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?

Reply

Marsh Posté le 21-01-2007 à 18:28:42    

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.

Reply

Marsh Posté le 21-01-2007 à 18:34:32    

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.

Reply

Marsh Posté le 21-01-2007 à 20:03:02    

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

Reply

Marsh Posté le 21-01-2007 à 21:07:43    

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?

Reply

Marsh Posté le 22-01-2007 à 00:15:51    

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

Reply

Marsh Posté le 22-01-2007 à 00:15:51   

Reply

Marsh Posté le 22-01-2007 à 01:18:24    

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.

Reply

Marsh Posté le 23-01-2007 à 14:24:37    

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.

Reply

Marsh Posté le 23-01-2007 à 15:04:19    

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

Reply

Marsh Posté le 23-01-2007 à 15:22:03    

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.

Reply

Marsh Posté le 23-01-2007 à 15:58:06    

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...

Reply

Marsh Posté le 23-01-2007 à 16:27:15    

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.

Reply

Marsh Posté le 23-01-2007 à 16:40:46    

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
Reply

Marsh Posté le 23-01-2007 à 16:45:06    

oki merci je vais aller regarder ca!

Reply

Marsh Posté le 23-01-2007 à 22:09:26    

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?

Reply

Marsh Posté le 23-01-2007 à 23:05:27    

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.

Reply

Marsh Posté le 25-01-2007 à 16:43:20    

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.
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed