Comment utiliser QPainter sur une deuxième fenetre avec Qt ?
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Comment utiliser QPainter sur une deuxième fenetre avec Qt ?



  1. #1
    joe_mimi

    Unhappy Comment utiliser QPainter sur une deuxième fenetre avec Qt ?


    ------

    Bonsoir,

    Alors, j'ai crée une courbe a l'aide de Qpainter mais le problème est que la courbe ne s'affiche que dans ma fenêtre principale et pas ailleurs, c'est à dire que QPainter prend effet que sur la fenêtre principale. Or, je voudrais que ma courbe s'affiche dans ma deuxième fenêtre fille cela est-ce possible ?
    Voici la partie concernante de mon .cpp


    Code:
    void Graphique :: paintEvent ( QPaintEvent *event )
    {
    	fstream flx; //flux
    	float tab[4201];
    	int cpt=0;
    	int a=0, b=0, c=0, d=0;
    	float pixel;
    	float coef=0;
    	
    	flx.open("Mesures.txt",ios::in); // Ouverture du fichier en lecture
    	
    	
    	
    	if ( flx.fail() )
    	// Verif si erreur ouverture fichier 
    	{ 
    		cout << "Erreur ouverture fichier \n"; 
    		_exit(1);
    		// Met fin au processus en cours 
    	} 
    	
    	
    	while ( !flx.eof() ) // Arret si fin de fichier 
    	{
    		//for(cpt=0;cpt<4200;cpt++)
    		//{
    		 	flx >> tab[cpt]; // Lecture depuis le fichier
    			cout<<tab[cpt]<<endl;
    		
    	 		if(tab[cpt]<=0.010)
              		a++;
    			if(tab[cpt]>0.011 && tab[cpt]<3)
    			b++;
    			if(tab[cpt]>3 && tab[cpt]<4)
    			c++;
    			if(tab[cpt]>5)
    			d++;
    			
    			
    		//}
    		
    	}
    	//recherche de plus grand pour calculer le coef
             if(a>b && a>c && a>d)
             {
    		coef=(float)a/-160.0;
       	 }
              if(b>a && b>c && b>d)
             {
    		coef=(float)b/-160.0;
       	 }
            if(c>a && c>b && c>d)
             {
    		coef=(float)c/-160.0;
       	 }
            if(d>a && d>b && d>c)
             {
    		coef=(float)d/-160.0;
       	 }
            
    
    
    	cout<<"pixel noir:"<<a<<endl;
    	cout<<"pixel vert:"<<b<<endl;
    	cout<<"pixel jaune:"<<c<<endl;
    	cout<<"pixel rouge:"<<d<<endl;	 
     	
    
           	QPainter p (this); // p va servir pour dessiner notre widget graphique
    	QRect dim = p.window(); // Donne les limites du dessin
    	
    	p.fillRect(dim,QBrush(Qt::white)); // Remplissage fond en blanc
    
    	// Changement origine: origine au centre
    	p.translate(dim.width()/2,dim.height()/2);
    
    	// Axes en noir
    	p.setPen(QPen(Qt::black,1));
    	p.drawLine(-dim.width()/2,0,dim.width()/2,0);
    	p.drawLine(-300,-dim.height()/2,-300,dim.height()/2);
    	p.drawText(-295,15,"0");
    	
    	p.drawText(dim.width()/2-15,15,"X");
    	p.drawText(-295,-180,"Y");
    	cout<<dim.width()<<endl<<dim.height()<<endl;
    	int i;
    	double x,y;
    }
    De plus, je fais une ouverture de fichier (par rapport aux fichiers des textes où sont représentées les mesures de la pièce). Mais lors de l'exécution du programme, une erreur d'ouverture de fichier s'affiche l'orque le fichier txt n'est pas dans mon dossier mais quand il se trouve bien dans le dossier, le programme s'exécute normalement. Or, le fichier txt ne doit pas se trouvé dans le dossier avant l'exécution, logiquement il doit se placer dans le dossier une fois que la connexion avec le serveur est établie et ensuite c'est alors la que le fichier texte apparait dans mon dossier. Et c'est alors là que le programme ouvre le fichier, et non avant.

    Pourriez vous m'aidez s'il vous plait, car cela m'embête vraiment et c'est urgent. Merci d'avance

    -----
    Dernière modification par JPL ; 19/04/2013 à 13h09. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    Jack
    Modérateur

    Re : Comment utiliser QPainter sur une deuxième fenetre avec Qt ?

    Pitié, utilise les balises code !!!

    Code:
    QPainter p (this);
    Je me trompe peut-être, mais le fait d'appeler le constructeur avec this va attacher p à l'instance qui l'a créé, en l'occurrence ta 1ère fenêtre.

    Pour ton histoire de fichier, je n'ai pas trop compris. Tu n'as qu'à essayer de l'ouvrir que lorsque tu l'as crée.

  3. #3
    joe_mimi

    Re : Comment utiliser QPainter sur une deuxième fenetre avec Qt ?

    Oui, j'ai bien utilisé QPainter p (this); Mais justement je ne veux pas qu'il soit dans ma 1ere fenêtre je veux qu'il soit dans une de mes fenêtre fille qui fenetre3=new QWidget;
    Et si je mets ma variable fentre3 comme paramètre : Qpainter p(&fenetre3); Celà donne erreur de compilation.

    Enfaite, je suis sur le pc de consultation (je suis client) et mon camarade de classe, lui est sur le pc de contrôle qui est le serveur. Je suis sensé recevoir le fichier texte qu'il m'envoi (le fichier txt qu'il a crée sur son programme). Et pour cela je fais une ouverture du fichier en lecture.

    Code:
    	fstream flx; //flux
    	float tab[4201];
    	int cpt=0;
    	int a=0, b=0, c=0, d=0;
    	float pixel;
    	float coef=0;
    	
    	flx.open("Mesures.txt",ios::in); // Ouverture du fichier en lecture
    	
    	if ( flx.fail() )
    	// Verif si erreur ouverture fichier 
    	{ 
    		cout << "Erreur ouverture fichier \n"; 
    		_exit(1);
    		// Met fin au processus en cours 
    	} 
    	
    	
    	while ( !flx.eof() ) // Arret si fin de fichier 
    	{
    		//for(cpt=0;cpt<4200;cpt++)
    		//{
    		 	flx >> tab[cpt]; // Lecture depuis le fichier
    			cout<<tab[cpt]<<endl;
    		
    	 		if(tab[cpt]<=0.010)
              		a++;
    			if(tab[cpt]>0.011 && tab[cpt]<3)
    			b++;
    			if(tab[cpt]>3 && tab[cpt]<4)
    			c++;
    			if(tab[cpt]>5)
    			d++;
    			
    			
    		//}
    		
    	}
    Et justement, lors de l'exécution du programme (çà compile sans erreur), une erreur d'ouverture de fichier s'affiche sur mon terminal. Lorsque que le fichier txt n'est pas situé dans mon dossier (où se trouve mon.h, mon .cpp, mon Main.cpp, .pro, exe ....).
    Dernière modification par JPL ; 19/04/2013 à 13h10. Motif: Ajout de la balise Code (#) pour garder l'indentation

  4. #4
    Jack
    Modérateur

    Re : Comment utiliser QPainter sur une deuxième fenetre avec Qt ?

    Et si je mets ma variable fentre3 comme paramètre : Qpainter p(&fenetre3); Celà donne erreur de compilation.
    En général, donner l'erreur affichée permet de déterminer la source du problème.

    Et justement, lors de l'exécution du programme (çà compile sans erreur), une erreur d'ouverture de fichier s'affiche sur mon terminal. Lorsque que le fichier txt n'est pas situé dans mon dossier (où se trouve mon.h, mon .cpp, mon Main.cpp, .pro, exe ....).
    Ca me semble logique ...
    Ouvrir un fichier qui n'existe pas provoque forcément une erreur.

    Où se trouve précisément ce fichier?
    Il n'y a pas moyen de spécifier son chemin?

    A+

  5. A voir en vidéo sur Futura
  6. #5
    joe_mimi

    Re : Comment utiliser QPainter sur une deuxième fenetre avec Qt ?

    Il se trouve /home/ts2/popote/Bureau/IHM/Mesures.txt dans le répertoire où il ya mon exploitation_mesures.h, exploitation_mesures.cpp, exploitation_mesuresMain.cpp, exploitation_mesures.pro ...

  7. #6
    Jack
    Modérateur

    Re : Comment utiliser QPainter sur une deuxième fenetre avec Qt ?

    J'ai du mal à te suivre: un coup tu dis que le fichier ne se trouve pas dans le répertoire de travail :
    une erreur d'ouverture de fichier s'affiche sur mon terminal. Lorsque que le fichier txt n'est pas situé dans mon dossier (où se trouve mon.h, mon .cpp, mon Main.cpp, .pro, exe ....).
    et maintenant tu dis qu'il est dans ton répertoire de travail:
    Il se trouve /home/ts2/popote/Bureau/IHM/Mesures.txt dans le répertoire où il ya mon exploitation_mesures.h, exploitation_mesures.cpp, exploitation_mesuresMain.cpp, exploitation_mesures.pro ...

  8. #7
    joe_mimi

    Re : Comment utiliser QPainter sur une deuxième fenetre avec Qt ?

    Oui, il est bien dans mon répertoire. J'ai cerné où est le problème. Mais dis moi, sais-tu comment faire hériter une classe de deux autres classes ?

  9. #8
    Jack
    Modérateur

    Re : Comment utiliser QPainter sur une deuxième fenetre avec Qt ?

    Citation Envoyé par joe_mimi Voir le message
    Oui, il est bien dans mon répertoire. J'ai cerné où est le problème. Mais dis moi, sais-tu comment faire hériter une classe de deux autres classes ?
    avec un moteur de recherche et en entrant heritage multiple c++
    D'une manière générale:

    class MaClasse: public Classe1, public Classe2 {
    etc.


    A+

  10. #9
    joe_mimi

    Re : Comment utiliser QPainter sur une deuxième fenetre avec Qt ?

    lol. Ok thanks, yes a+

Discussions similaires

  1. Comment installer une deuxième prise téléphone ? ?
    Par invite5457085e dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 29/02/2012, 22h05
  2. comment isoler du bruit une porte fenetre donnant sur la rue ?
    Par inviteb98e4f4d dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 4
    Dernier message: 07/01/2012, 08h18
  3. Utiliser AxioVison avec une camera sur un microscope
    Par invite2313209787891133 dans le forum Physique
    Réponses: 4
    Dernier message: 18/11/2010, 11h49
  4. comment faire apparaitre une fenêtre avec dreamweaver?
    Par invitef61b7e97 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 02/10/2008, 20h35
  5. Comment créer une deuxième adresse
    Par roro123 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 6
    Dernier message: 05/10/2005, 12h55