[qt designer] Interface graphique

Interface graphique [qt designer] - C++ - Programmation

Marsh Posté le 19-04-2006 à 10:26:09    

Voila je devrai développer une interface graphique avec qt designer pour afficher une image , ainsi que son centre marqué d'une croix puis aussi une forme entourent l'objet détecté.. Je n'ai jamais développé sur ce logiciel, donc si vous pouvez m'aider, ca serais super sympa
 
Merci

Reply

Marsh Posté le 19-04-2006 à 10:26:09   

Reply

Marsh Posté le 19-04-2006 à 11:18:43    

Pour afficher à la fois des images et des figures géométriques, utilise un canvas. J'ai posté un code recemment si tu veux un exemple.
 
QtDesigner ne gère pas les canvas, mais tu peut y ajuster d'autres widgets. Le principe de base est de mettre des layouts (qui calculent automatiquement le positionnement et la taille des widgets), et des widgets.
 
QMake (shell: qmake) compile les fichiers .ui faits par QtDesigner.
 
Pour la doc, tu as QtDoc (shell: qtdoc), et une aide en ligne de QtDesigner.


Message édité par nargy le 19-04-2006 à 11:18:57
Reply

Marsh Posté le 19-04-2006 à 12:28:53    

c'est a dir que pour le moment j'ai fait un load de l'image à traiter puis un seuillage puis un save de l'image résultat.
 
Et j'ai regardé, il ya la fonction Qrect pour tracer un rectangle mais pour le moment j'ai rien développé en interface graphique et je cherche une personne qui pourrai m'aider déja a affiché cet image dans un canvas puis ensuite j'essairai de tracé un rectangle
 
mais ce que je comprends pas, c'est qu'il faut bien que je spécifi que je trace le rectangle sur mon interface graphique ?
 
Merci d'expliqué le plus simplement possible car déja les widgets, j'ai jamais utilisé, je sais pas trop ce que c'est...

Reply

Marsh Posté le 19-04-2006 à 13:03:59    

ho chaud... widget est une contraction de window+gadget. Les boutons, fenêtres, boîtes, images etc... d'un système de fenêtrage sont appelés widgets.
 
Il te faudrait un tuto, je n'en connais pas mais il me semble que tu en trouvera une tonne sur le net.
 
Sinon, tu peut commencer par lire un peu la doc de Qt, il y a quelques tutos et des exemples inclus.

Reply

Marsh Posté le 19-04-2006 à 14:40:37    

c'est ce que je fai :) tinkiète pas je cherche mais bon si quelqu'un connais bcp mieu le truc que moi pour me facilité la tâche, je suis ouvert lol

Reply

Marsh Posté le 19-04-2006 à 17:00:56    

ben, je commence à masteuriser Qt, mais j'utilise rarement Qt Designer, je me fait mes présentations à la main.
Si tu as des questions particulières n'hésite pas. Pour ce qui est des questions générale sur le fonctionnement d'une interface graphique, il te faut un tuto sur le web parcequ'il y a beaucoup trop à dire.
 
Si tu veux je peut te résumer Qt:

  • Qt est composé de différents modules, plutôt indépendants les uns des autres, avec un module central composé de classes généralistes: QString, Q*List, Q*Map, QImage, QMovie, etc...
  • la classe de base est QObject, presque toutes les classes en dérivent, QObject sert à créer une arborescence d'objets, et gère la désallocation,
  • Qt possède un générateur externe (qmake), qui gère les fichiers moc et ui, avec lequel tu peut créer tes classes Object,
  • la particularité de Qt est de gérer les évènement avec des signaux et des slots (voir Q_OBJECT), le générateur de makefile qmake sert notamment à repérer dans tes sources les signaux et les slots, les signaux et les slots sont des fonctions membres qui se connectent entre elles,
  • la classe de base des widgets est QWidget, presque toutes les représentation graphiques en dérivent: QFrame, QLineInput, QListBox, QCheckBox, QPushButton, etc... Un QWidget est un espace rectangulaire sur l'écran, et possède une myriade de propriétés liées à la représentation graphique, à la gestion de la souris et du clavier, etc...
  • Qt gère aussi certains évènements plus classiquement grâce à des fonctions virtuelle protégées,
  • Qt possède plein de classes de haut niveau pour créer facilement de présentations standard, comme des fenêtres avec menus, des tableaux comme les tableurs (excel), des navigateurs HTML2, etc...


C'est loin d'être exhaustif.

Reply

Marsh Posté le 20-04-2006 à 12:52:55    

ok ok, mais ya un truc que je pige pas, c'est que certain tape un code pour avoir l'interface graphique qu'alors les menus citué à gauche contienne des composant graphique? .
Sinon pour afficher juste une image, quel composant utiliser et ou placé le code.
 
J'ai vu PixmapLabel, je pense que je peu utilisé celui ci pour affiché mon image pixel par pixel mais au niveau codage, j'ai un peu des fenêtre de partout, mais je pense que le code pour utiliser ce composant devra ce cituer dans le main()
 
Dite moi si je me trompe....

Reply

Marsh Posté le 20-04-2006 à 13:32:45    

> ok ok, mais ya un truc que je pige pas, c'est que certain tape un code pour avoir l'interface graphique qu'alors les menus citué à gauche contienne des composant graphique?
- je ne suis pas sûr de comprendre la question à cause des fôtes. QtDesigner sert à mettre en place tes widgets, puis transforme en code ton interface graphique. Pour faire effectuer des opérations à ton programme, tu doit coder toi-même les fonctions necessaires, QtDesigner ne le fait pas à ta place. Au début j'utilisait QtDesigner, mais maintenant je m'en passe souvent en faisant le code de l'interface graphique à la main.
 
> J'ai vu PixmapLabel, je pense que je peu utilisé celui ci pour affiché mon image pixel par pixel
- exact, tu peut utiliser un PixmapLabel.
 
> je pense que le code pour utiliser ce composant devra ce cituer dans le main()
- ho non, fait plutôit une classe par widget. Pour chaque composant que tu modèle fait un fichier .h, un fichier .cpp, et mets y une classe qui dérive de l'une des classes de Widget sur laquelle tu claque le comportement de ton widget: par ex. QMainWindow, QLabel, QFrame, ou carrément QWidget si ton widget n'a rien à voir avec ce qui existe déjà.

Reply

Marsh Posté le 20-04-2006 à 15:53:12    

ok j'ai trouvé un super tuto, je vais tout le fair comme ca ca ira mieu...
 
C'est tout du code à tapé aller je suis parti lol ....

Reply

Marsh Posté le 20-04-2006 à 16:10:10    

tu peux envoyer le tutos ....

Reply

Marsh Posté le 20-04-2006 à 16:10:10   

Reply

Marsh Posté le 20-04-2006 à 16:10:17    

k, bon courage :)

Reply

Marsh Posté le 20-04-2006 à 16:49:16    

Reply

Marsh Posté le 20-04-2006 à 16:49:48    

je trouve que c'est très bien fait mais après en avoir écris 8; je me suis arrêter lol ....

Reply

Marsh Posté le 20-04-2006 à 16:52:57    

sinon j'ai essayé un codage pour afficher une image :

Code :
  1. dans la class MyWidget
  2. QImage first;
  3. first.load("image.png" );
  4. QPixmap *image = new QPixmap (first).


 
mais voila, qd j'execute mon progr, il s'affiche un fenêtre sans rien dedans??
 
que fair ? et je suis certain que limage et belle et bien chargé car j'ai déja testé pour le load

Reply

Marsh Posté le 20-04-2006 à 17:07:11    

non en faite, on ma fait un programme qui créer une image en RGB donc j'ai oublier quelque ligne de code ci dessus mais même si je fait un copier coller de tout le code qui marche nikel, et bien j'ai le même résultat, donc et bien ca marche pas ... snif

Reply

Marsh Posté le 20-04-2006 à 17:31:56    

Code :
  1. QImage first;
  2.     first.load("image.png" );
  3.     QPixmap *image = new QPixmap (first);
  4.     QVBoxLayout* layout=new QVBoxLayout(this);
  5.     QLabel* affichage=new QLabel(this);
  6.     affichage->setPixmap(image);
  7.     layout->addWidget(affichage);


Message édité par nargy le 20-04-2006 à 17:32:38
Reply

Marsh Posté le 21-04-2006 à 10:40:24    

ok merci c super sympa de m'aider car bon moi j'ai jamais programmé la dessus donc c pas simple.. enfin bon j'avais déja 3 ligne de juste mdr, c'est un debut. Et sinon, juste une question, je dois appliqué des filtres morphologique pour le débruitage de mon image seuiller puis calculé le centre et la surface de mon objet trouvé (valeur 255 pour le pixel) et tout le reste reste a 0. Mais je ne vois pas de filtre ou autre d'intégré sur qt designer, je dois tout fair moi même ? et sinon pour le centre et la surface pareil ?

Reply

Marsh Posté le 21-04-2006 à 10:44:34    

alors oui, Qt il est pas prévu pour faire des manipulations d'images, juste les trucs basiques (tu peut coder des filtres graphiques toi même).
Utilise plutôt une bibliothèque d'image. Sous linux je te conseilles ImageMagick qui est très complet.

Reply

Marsh Posté le 21-04-2006 à 11:10:33    

j'ai trouvé sur le net en cherchant toute la matinée un programme développé sur qt designer avec pas mal de filtre morphologique, donc je pense que ca va me simplifié un peu la tâche, c'est pas mal qd les thésard partage leur source :)

Reply

Marsh Posté le 21-04-2006 à 15:45:48    

bon il faut se rendre a l'évidence, mon programme ne marche pas pfffff, c'est pas cool..
Je choisi mon image à l'aide du QFileDialog, se qui me donne un FilePath, puis je fait un Qimage Picture; et Picture.load(FilePath);
Comment déja vérifier que cet partie la est correcte?
je n'arrive pas a affiché avec un printf le FilePath..


Message édité par heyheyhey71 le 21-04-2006 à 15:46:00
Reply

Marsh Posté le 21-04-2006 à 16:11:58    

non, c'est bon ca marche, c'était un autre composant qui recouvrai mon image (et dir que j'ai chercher pendant une journée entiere) enfin bon

Reply

Marsh Posté le 21-04-2006 à 16:47:09    

> printf le FilePath..

Code :
  1. QString s="Hello";
  2. printf("%s\n",(const char*)s);


Reply

Marsh Posté le 21-04-2006 à 16:49:49    

> non, c'est bon ca marche, c'était un autre composant qui recouvrai mon image (et dir que j'ai chercher pendant une journée entiere) enfin bon
- utilise un qlayout, ça te permet de disposer les widgets automatiquement sans qu'ils se recouvrent, avec QtDesigner dans le menu layout: Ctrl+H, Ctrl+L, Ctrl+G.

Reply

Marsh Posté le 23-04-2006 à 00:58:24    

nargy a écrit :

> printf le FilePath..

Code :
  1. QString s="Hello";
  2. printf("%s\n",(const char*)s);



Je vous conseillerais plutôt le qDebug(). Ca vous évitera les galères de soupe C/Qt (genre les problèmes de codec).
Sans compter que dans Qt4, le qDebug devient considérer comme un flux, ce qui devient mille fois plus pratique à écrire ;)

Reply

Marsh Posté le 23-04-2006 à 01:04:54    

ok, dac, tu as raison, (const char*)QString peut planter s'il s'agit d'une variable temporaire.

Reply

Marsh Posté le 23-04-2006 à 23:16:26    

nargy a écrit :

ok, dac, tu as raison, (const char*)QString peut planter s'il s'agit d'une variable temporaire.


Là, je ne te suis pas du tout  :??:

Reply

Marsh Posté le 24-04-2006 à 00:17:49    

si tu fait par exemple:

Code :
  1. printf("%s\n",(const char*) QString("hello" ).replace(QChar('e'),QChar('i')));


tu obtient un joli segfault car l'expression QString(...).replace(...) retourne un QString temporaire, tu la convertit en (char*), puis la QString temporaire est détruite puisque tu n'en a plus besoin, et enfin tu execute le printf. Du coup le (char*) a disparu avant le printf.
 
Si ton compilateur ne se comporte pas de cette façon (ça arrive avec les vieux compilos) il n'est pas conforme.

Reply

Marsh Posté le 24-04-2006 à 01:19:32    

Ah oki, j'ai jamais cherché à faire ce genre de soupe :D
 
Edit: cat C++ oblige, std::cout powaa! (même si ça ne change probablement rien à ton bug :) )


Message édité par IrmatDen le 24-04-2006 à 01:22:24
Reply

Marsh Posté le 24-04-2006 à 02:38:56    

bref, qDebug() avec Qt. En plus c'est censé gérer l'unicode.

Reply

Marsh Posté le 24-04-2006 à 16:55:26    

oki oki, j'ai résolu ce problème mais comment afficher un float dans un label ? avec le setText(); il faut je pense convertir le float en Qstring mais quel est la ligne de code svp?

Reply

Marsh Posté le 24-04-2006 à 17:10:36    

fonction statique: QString::number()

Reply

Marsh Posté le 25-04-2006 à 11:00:44    

et pour mettre dans un label :
center->setText("x:"QString::number(x));
 
je sais que ce code et faut, si tu as la soluce?

Reply

Marsh Posté le 25-04-2006 à 11:45:04    

QString::operator + (const QString&, const QString& ):
 
center->setText("x:" + QString::number(x));
 
Note: lit la doc de QString ;)

Reply

Marsh Posté le 25-04-2006 à 11:55:14    

ok la j'avais demander un peu trop vite lol, j'avais trouvé sorry...
 
Me reste a afficher une croix à x et y.

Reply

Marsh Posté le 25-04-2006 à 12:12:46    

Regarde du côté de QPainter.

Reply

Marsh Posté le 26-04-2006 à 10:37:37    

j'ai regardé QPainter et aussi drawline mais ya un truc que je comprend pas ... Peu être ca te paraitra débile mais bon on a pas tous la même connaissance.
Il faut bien que je fasse un drawline sur mon Label ou j'affiche l'image?  

Code :
  1. QPainter p;
  2. P.begin (this);
  3. p.drawline(x1,y1,x2,y2);
  4. p.end()


 
Mais comment lui dir de mettre cela sur le label ?
 
merci

Reply

Marsh Posté le 26-04-2006 à 11:20:55    

Code :
  1. QPainter ( const QPaintDevice * pd, bool unclipped = FALSE )


Citation :


The QWidget class is the base class of all user interface objects. More...  
#include <qwidget.h>  
Inherits QObject and QPaintDevice.  


Reply

Marsh Posté le 26-04-2006 à 11:22:50    

Voir aussi la doc de:
void QWidget:: paintEvent ( QPaintEvent * ) [virtual protected]


Message édité par nargy le 26-04-2006 à 11:23:04
Reply

Marsh Posté le 26-04-2006 à 12:02:22    

Je suis daccord qu'il faut utiliser QPainter pour tracer des lignes, ok, QPainter::drawLine ( int x1, int y1, int x2, int y2 )
Mais le truc c'est que moi je travail sur un QImage ou un QLabel.
Mais je ne voi pas comment je peu fair pour afficher ce paint sur mon QLabel


Message édité par heyheyhey71 le 26-04-2006 à 12:03:00
Reply

Marsh Posté le 26-04-2006 à 12:37:27    

tu passe au constructeur du QPainter le QLabel sur lequel tu veux dessiner,
tu overload la fonction paintEvent pour qu'après avoir dessiné l'image (appel à QLabel:: paintEvent), elle dessine par dessus le dessin du QPainter.
 
ah oui, tu doit créer ta propre classe MyQLabel, héritant de QLabel, pour l'overload.


Message édité par nargy le 26-04-2006 à 12:38:43
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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