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

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Page Suivante
Auteur Sujet :

[qt designer] Interface graphique

n°1368644
heyheyhey7​1
Posté le 17-05-2006 à 12:23:23  profilanswer
 

Reprise du message précédent :
Mais pour le coup de créer cet croix sur mon QLabel me pose pas mal de problèmes !! j'en conviens lol...

mood
Publicité
Posté le 17-05-2006 à 12:23:23  profilanswer
 

n°1368660
heyheyhey7​1
Posté le 17-05-2006 à 12:51:47  profilanswer
 

et je veux bien que la documentation soit clair pour QT mais le problème, c'est que qd je cherche paintEvent(), je trouve tout sauf un paintEvent sur un Qlabel, c'est ca mon problème.
 
paintEvent: QButton QFrame QGLWidget QSizeGrip QStatusBar QTabBar QWidget

n°1368685
heyheyhey7​1
Posté le 17-05-2006 à 13:18:24  profilanswer
 

nargy a écrit :

Ça compile:

Code :
  1. #include <qlabel.h>
  2. #include <qpainter.h>
  3. class Apercu: public QLabel
  4. {
  5.   int x1,x2,y1,y2;
  6.   public:
  7.   Apercu(QWidget* parent, const char* name=0, WFlags f=0):
  8.     QLabel(parent, name, f), // appeler le constructeur de label
  9.     x1(0), x2(0), y1(0), y2(0) // init
  10.   {}
  11.   void setCross(int x1_, int x2_, int y1_, int y2_)
  12.   { x1=x1_; x2=x2_; y1=y1_; y2=y2_; }
  13.   protected:
  14.   void paintEvent(QPaintEvent* e)
  15.   {
  16.     // afficher l'image
  17.     QLabel::paintEvent(e);
  18.     // dessiner la croix:
  19.     QPainter p;
  20.     p.begin (this);
  21.     // repeindre uniquement ce qui est nécessaire
  22.     p.setClipRegion(e->region());
  23.     // affiche une ligne
  24.     p.drawLine(x1,y1,x2,y2);
  25.     // valider
  26.     p.end();
  27.   }
  28. };



 
 
Ce programme en effet compile très bien, mais qd j'execute mon programme, il me met un Violacion de segmento

n°1368837
heyheyhey7​1
Posté le 17-05-2006 à 15:25:30  profilanswer
 

pour mon problème de bouton :

Code :
  1. connect(StartBut,SIGNAL(clicked()),this, SLOT(Start()))


 
Peut être yorai t'il un autre moyen comme

Code :
  1. connect(this,SIGNAL(...........()),this, SLOT(Start()))


 
Je n'arrive pas a trouvé une liste des signaux pour trouvé un truc du genre, qd l'IHM apparaît ou un similaire

n°1368864
heyheyhey7​1
Posté le 17-05-2006 à 15:37:11  profilanswer
 

Signals
 
lastWindowClosed ()
aboutToQuit ()
guiThreadAwake ()
 
il y a que cela en relation avec QApplication, pas de quoi me réjouire lol


Message édité par heyheyhey71 le 17-05-2006 à 15:50:27
n°1369037
nargy
Posté le 17-05-2006 à 17:35:04  profilanswer
 

Tu est sous quel système? Sous linux, il y a la commande ``qtdoc`` qui affiche la doc. Il doit y avoir un équivalent sous windows, sinon il y a la doc sur le web.
Les signaux y sont parfaitement documentés.
 
Il me semble que tu devrai revoir la notion d'héritage. Une classe hérite d'une autre, récupère ses fonctions, et en définit de nouvelles, ou redéfinie celles existantes. J'ai l'impression que ton problème de segmentation fault a un rapport avec le traitement de la classe Apercu comme un QLabel.
 
Quand l'IHM appraît: il s'agit du constructeur. Ok, pour expliquer vite fait, au démarrage, la fonction main() est lancée, elle construit l'interface en appelant les constructeurs necessairees. Puis lorsqu'arrive la ligne app.exec(...) il se produit une boucle infinie, dans laquelle est géré les évènements, chaque évènement pouvant en provoquer d'autres, et certains évènement étant gérés par le système: clavier, souris, écran, .... Tout le reste du programme est géré par évènement.
 
La solution proposée, est d'appeler la fonction start() à partir du constructeur, et d'appeler artificiellement le gestionnaire d'évènement à l'aide de app->processEvent(), qui execute un tour de boucle de gestion d'évènement, permettant de traiter les évènements en cours: affichage, gestion clavier, gestions E/S, etc... et ainsi forcer l'affichage de la fenêtre. Sans quoi, la fenêtre ne s'affichera que lorsque tu entre dans la boucle app.exec().
 
Bref, tu doit donc séparer l'évènement clicked() de ton bouton, à relier à la fonction start(), du premier appel de la fonction start() à partir du constructeur.

n°1369292
IrmatDen
Posté le 18-05-2006 à 00:23:57  profilanswer
 

nargy a écrit :

Quand l'IHM appraît: il s'agit du constructeur. Ok, pour expliquer vite fait, au démarrage, la fonction main() est lancée, elle construit l'interface en appelant les constructeurs necessairees. Puis lorsqu'arrive la ligne app.exec(...) il se produit une boucle infinie, dans laquelle est géré les évènements, chaque évènement pouvant en provoquer d'autres, et certains évènement étant gérés par le système: clavier, souris, écran, .... Tout le reste du programme est géré par évènement.
 
La solution proposée, est d'appeler la fonction start() à partir du constructeur, et d'appeler artificiellement le gestionnaire d'évènement à l'aide de app->processEvent(), qui execute un tour de boucle de gestion d'évènement, permettant de traiter les évènements en cours: affichage, gestion clavier, gestions E/S, etc... et ainsi forcer l'affichage de la fenêtre. Sans quoi, la fenêtre ne s'affichera que lorsque tu entre dans la boucle app.exec().
 
Bref, tu doit donc séparer l'évènement clicked() de ton bouton, à relier à la fonction start(), du premier appel de la fonction start() à partir du constructeur.


Oulala, surtout pas! C'est ce que j'expliquais quelque post plus haut.
Le constructeur correspond à la création de l'interface (ou plutôt de ce que tu lui fais créer à ce moment), en aucun cas à son affichage puisqu'il faut attendre d'exécuter la boucle d'événement pour ce faire.
 
J'ai donner la solution plus haut, et il n'y en a pas d'autre à ce que je sache.

n°1370158
farib
Posté le 18-05-2006 à 22:44:17  profilanswer
 

heyheyhey71 a écrit :

et je veux bien que la documentation soit clair pour QT mais le problème, c'est que qd je cherche paintEvent(), je trouve tout sauf un paintEvent sur un Qlabel, c'est ca mon problème.
 
paintEvent: QButton QFrame QGLWidget QSizeGrip QStatusBar QTabBar QWidget


 
 
Tous les widget dérivent de QWidget donc ont un paintEvent() virtuel dérivable....

n°1370375
heyheyhey7​1
Posté le 19-05-2006 à 11:05:53  profilanswer
 

Pour l'histoire du démarrage, et bien j'ai regardé en lancan ma fonction Start() dans le constructeur mais même avec app->processEvent() l'interface ne s'affiche pas... Mais je réessairai un peu plus tard !!
 
Pour les autre solution proposé par IrmatDen, je veux bien mais pour moi c'est du chinoi ce que tu ma écris... lol !!
 
Pour ce QLabel, après plein d'essai, j'ai toujours pas trouvé la solution :/

n°1370397
nargy
Posté le 19-05-2006 à 11:24:53  profilanswer
 

Encore une fois, renseignes-toi sur la notion d'héritage en C++, ça t'aidera à y voir plus clair.
On parle de la même chose avec IrmatDen, je me suis mal exprimé.
Dans ta fonction Start(), à chaque tour de boucle, tu charge une image puis tu appelle app->processEvents() pour forcer l'affichage.

mood
Publicité
Posté le 19-05-2006 à 11:24:53  profilanswer
 

n°1370417
heyheyhey7​1
Posté le 19-05-2006 à 11:36:32  profilanswer
 

La notion d'héritage je la connais, mais il faut bien que j'appel dans le constructeur de ma Fenetre le constructeur de la classe Apercu qui va créer mon Qlabel ? Non ?

n°1370419
nargy
Posté le 19-05-2006 à 11:38:22  profilanswer
 

oui

n°1370438
heyheyhey7​1
Posté le 19-05-2006 à 11:52:55  profilanswer
 

et bien c'est cette ligne que je ne connais pas !!
 
Pour construire un Label dans ma classe fenetre, je mettais

Code :
  1. Apercu = new QLabel(this, "Apercu" );


Bon ca ok, c'est tout simple...
 
Mais pour appeler mon constructeur de ma classe Apercu, je ne sais trop comment faire.
 
j'ai vu un truc dans ce genre dans un tuto mais visiblement ce n'est pas correcte..

Code :
  1. apercu *Apercu= new Apercu (this, "Apercu" )


Message édité par heyheyhey71 le 19-05-2006 à 14:06:26
n°1370712
nargy
Posté le 19-05-2006 à 16:16:09  profilanswer
 

ben si! à qq erreurs de syntaxe près:

Code :
  1. Apercu* apercu=new Apercu(this,"Apercu" );

n°1370926
IrmatDen
Posté le 19-05-2006 à 23:05:49  profilanswer
 

En ce qui concerne l'initialisation des aperçus, j'avais donné la réponse ici.
 
En pratique, ça donne ça (en l'adaptant à ton code bien sûr).
Dans le header, ajouter une variable membre indiquant si la fenêtre a déjà été initialisée ou pas:

Code :
  1. class MyMainWindow : public QMainWindow
  2. {
  3. ...
  4. private:
  5.     bool m_windowCreated;
  6. }


Et dans l'implémentation:

Code :
  1. MyMainWindow::MyMainWindow(...)
  2. {
  3.     ... // initialisation de ta fenêtre, création des widgets, connection des slots, etc...
  4.     m_windowCreated = false;
  5. // N'appelle surtout pas Start ici!!!!
  6. }
  7. MyMainWindow::showEvent(QShowEvent *event)
  8. {
  9.     if(!m_windowCreated)
  10.     {
  11.         m_windowCreated = false;
  12.         Start(); // maintenant que la boucle d'événement est en place, alors qApp->processEvent() fonctionnera
  13.     }
  14. }


C'est tapé à l'arrache, alors c'est pas dit que ça compile cash, de toute façon il manque quelque chose dans l'en-tête ;)

n°1371945
heyheyhey7​1
Posté le 22-05-2006 à 10:52:47  profilanswer
 

ok, je testerai tout ca cet aprem !!

n°1372133
IrmatDen
Posté le 22-05-2006 à 14:08:48  profilanswer
 

OULALA! je viens de voir la ligne 12!!
Il fallait bien sûr lire m_windowCreated = true.
 
Désolé :(

n°1372137
heyheyhey7​1
Posté le 22-05-2006 à 14:10:15  profilanswer
 

lol oui t'inquiète pas ca j'aurais bien trouvé mdr :)

n°1374894
heyheyhey7​1
Posté le 25-05-2006 à 13:46:21  profilanswer
 

bon j'ai fait quelque bou de programme que je pouvais fair sans aide, truc de dingue mais c'est bon je gère, sinon pour le

Code :
  1. Apercu* apercu=new Apercu(this,"Apercu" );


 
et bien non ca ne marche pas ...
il me met apercu undeclared
 
et pour  

Code :
  1. Apercu* Apercu=new Apercu(this,"Apercu" );


 
vu que mon constructeur contient une majuscule et bien il me met: invalid operand of type Qlabel* and Qlabel* to binary operator*
erreur de decodification before ')'

n°1374897
heyheyhey7​1
Posté le 25-05-2006 à 13:47:30  profilanswer
 

je bien inclu mon fichier sur lequel il ya ma classe Apercu !!

n°1374899
heyheyhey7​1
Posté le 25-05-2006 à 13:50:11  profilanswer
 

Code :
  1. #include<qlabel.h>
  2. #include<qpainter.h>
  3. #include"fenetre.h"
  4. class Apercu : public QLabel
  5. {
  6.    int x1,x2,y1,y2;
  7. public :
  8. Apercu(QWidget *parent, const char *name=0)
  9. : QLabel(parent, name)
  10. {
  11. }
  12.    
  13. protected :
  14. void paintEvent(QPaintEvent *e)
  15. {
  16.     QLabel::paintEvent(e);
  17.     QPainter p;
  18.     p.begin(this);
  19.     p.setClipRegion(e->region());
  20.     p.drawLine(10,20,30,20);
  21.     p.end();
  22. }
  23. };


 
voici mon fichier draw.h avec ma classe Apercu

n°1374962
IrmatDen
Posté le 25-05-2006 à 16:39:02  profilanswer
 

heyheyhey71 a écrit :

Code :
  1. Apercu* Apercu=new Apercu(this,"Apercu" );



Fallait oser le tester et le poster ça  :sweat:  
 

Citation :

bon j'ai fait quelque bou de programme que je pouvais fair sans aide, truc de dingue mais c'est bon je gère, sinon pour le
Code :
   1.
      Apercu* apercu=new Apercu(this,"Apercu" );  
 
et bien non ca ne marche pas ...
il me met apercu undeclared


N'en dis surtout pas plus, ce serait trop facile de comprendre ce qui ne va pas [:amel_the_white]  
 
Bref, apprend le C++ et comment Qt fonctionne... Là tu ne fais que jouer à l'apprenti sorcier et tester n'importe quoi sans réfléchir, ni lire la doc...
Je laisse tomber  :pfff:

n°1375083
nargy
Posté le 25-05-2006 à 20:27:30  profilanswer
 

> l'erreur:
- quel code??? quelle ligne???
 
Les tutos ne servent pas à faire du copier/coller, mais à comprendre par l'exemple.

n°1375379
heyheyhey7​1
Posté le 26-05-2006 à 11:02:15  profilanswer
 

IrmatDen a écrit :

Fallait oser le tester et le poster ça  :sweat:  
 

Citation :

bon j'ai fait quelque bou de programme que je pouvais fair sans aide, truc de dingue mais c'est bon je gère, sinon pour le
Code :
   1.
      Apercu* apercu=new Apercu(this,"Apercu" );  
 
et bien non ca ne marche pas ...
il me met apercu undeclared


N'en dis surtout pas plus, ce serait trop facile de comprendre ce qui ne va pas [:amel_the_white]  
 
Bref, apprend le C++ et comment Qt fonctionne... Là tu ne fais que jouer à l'apprenti sorcier et tester n'importe quoi sans réfléchir, ni lire la doc...
Je laisse tomber  :pfff:


 
 
Merci pour l'aide antérieur mais vien plus sur ce post !!! on est pas tous des programmeurs qui savent tout sur tout et qui se prenne pour dieu @++
Au lieu de dir que c'est vraiment des horreurs que je post et bien c'est un post d'aide ou on peu expliqué au gens les erreurs qu'il font pour qu'il comprenne !!


Message édité par heyheyhey71 le 26-05-2006 à 15:53:24
n°1375380
heyheyhey7​1
Posté le 26-05-2006 à 11:04:09  profilanswer
 

nargy a écrit :

> l'erreur:
- quel code??? quelle ligne???
 
Les tutos ne servent pas à faire du copier/coller, mais à comprendre par l'exemple.


 
L''erreur se situ à l'appel du constructeur Apercu lequel est placé dans le constructeur de ma fenetre

n°1375382
nargy
Posté le 26-05-2006 à 11:09:13  profilanswer
 

> L''erreur se situ à l'appel du constructeur Apercu lequel est placé dans le constructeur de ma fenetre
- post le code et le message exact
Edit: le code complet du constructeur


Message édité par nargy le 26-05-2006 à 11:09:36
n°1375385
heyheyhey7​1
Posté le 26-05-2006 à 11:12:25  profilanswer
 

Le code de ma classe Apercu est posté plus haut !
et le constructeur n'est ni plus ni moins que pour moi la ligne sur laquel critique IrmatDen

n°1375387
nargy
Posté le 26-05-2006 à 11:17:24  profilanswer
 

heyheyhey7 1> poste le code de ce fameux constructeur, et le message d'erreur, ainsi que la ligne exacte à laquel l'erreur survient. Sinon je peut pas deviner. c'est ok pour la classe apercu. Vérifie que tu n'a pas d'autres erreurs liées à la classe Apercu (classe manquante, etc..) qui empêcherait new Apercu() de fonctionner.

n°1375419
heyheyhey7​1
Posté le 26-05-2006 à 11:51:39  profilanswer
 

oki je ferais ca dès que je trouve un poil de temps, car je travail sur 2 pc et c'est pas simple lol ...

n°1381947
heyheyhey7​1
Posté le 06-06-2006 à 11:59:50  profilanswer
 

j'ai juste encore un petit problème pour récupéré mes valeurs contenues dans des QTextEdit.
C'est pour les convertir en float
je récupère un QString, jusque la tout va bien mais

Code :
  1. float a=float(mon QString).

n°1381957
nargy
Posté le 06-06-2006 à 12:09:45  profilanswer
 

voir QString::toFloat(bool * ok=0)

n°1381997
heyheyhey7​1
Posté le 06-06-2006 à 13:01:46  profilanswer
 

oki j'ai trouvé avec atof(.... )
 
Merci ;)

n°1382147
heyheyhey7​1
Posté le 06-06-2006 à 15:33:38  profilanswer
 

autre petite chose que je regarde, c'est le passage de ma pictureS2 en paramètre pour ne plus avoir a fair de load et de save !!
 
j'ai commencé par déclaré mon pictureS2 dans ma class
QImage PictureS2,
 
pour lapel de mes fonctions -> &PictureS2
codage dans mes fiocntion -> *PictureS2
 
exemple trouvé

Code :
  1. void test(int *pj)  /* test attend l'adresse d'un entier... */
  2. {
  3.     *pj=2;          /* ... pour le modifier. */
  4.     return;
  5. }
  6. int main(void)
  7. {
  8.     int i=3;
  9.     test(&i);   /* On passe l'adresse de i en paramètre. */
  10.     /* Ici, i vaut 2. */
  11.     return 0;
  12. }


 
seulement mon programme ne compile pas, il trouve une erreur pour la ligne d'appel de ma fonction ...

n°1382348
nargy
Posté le 06-06-2006 à 19:38:36  profilanswer
 

Essaye de respecter le règles de codage, même si les compilateurs sont très laxistes dessus: utilise des variables qui commencent par une minuscule.
 
Pour ton problème, peut-tu poster les lignes où se trouve l'erreur.

n°1382679
heyheyhey7​1
Posté le 07-06-2006 à 11:03:31  profilanswer
 

c'est bon j'ai résolu, mais le code posté n'était qu'un exemple du net....
Ca ne marche pas de cette facon pour l'utilisation de QT !!! tssssss, mais c'est bon j'ai trouvé la soluce :)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
methode pour créer une interfaceProblème avec fenêtre graphique
[VBA][Excel] Help ! Problème avec graphique[VBA] [Excel] Chercher la première ligne après un graphique
Interface et classes abstraites en php5 et php6[qt designer] Calcul du centre d'un objet
Question de débutant. Interface HTML pour mes scripts perl ???Créer une interface graphique en c
installer une interface https ? 
Plus de sujets relatifs à : [qt designer] Interface graphique


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