Partage
  • Partager sur Facebook
  • Partager sur Twitter

[QT] Modifier un widget

à partir d'une fonction

Sujet résolu
    12 juin 2008 à 10:18:56

    Bonjour !
    Voila en reprenant certains bouts de code du tuto de M@théo j'ai essayé de faire choisir un fichier à l'utilisateur.
    J'aimerais que lorsque l'utilisateur a validé son choix, le chemin du fichier choisi soit dans un QlineEdit
    J'ai donc ceci :
    QLineEdit *cheminClef = new QLineEdit();
    		QPushButton *bouton2 = new QPushButton("Charger");
    		
    		QObject::connect(bouton2, SIGNAL(clicked()), this, SLOT(choisirClef()));
    		
    		QHBoxLayout *layoutBoite = new QHBoxLayout;
    		layoutBoite->addWidget(cheminClef);
    		layoutBoite->addWidget(bouton2);
    		
    		
    	groupBox->setLayout(layoutBoite);
    	
    	QHBoxLayout *layout2 = new QHBoxLayout;
    	// layout2->addWidget(/* truc */);
    	
        QVBoxLayout *layout = new QVBoxLayout;
        layout->addLayout(layout1);
        layout->addWidget(groupBox);
        layout->addLayout(layout2);
    	
        zoneCentrale->setLayout(layout);
    	
        setCentralWidget(zoneCentrale);
    }
    
    void FenPrincipale::choisirClef()
    {
    	QString fichier = QFileDialog::getOpenFileName(this, "Sélectionner un fichier", QString());
    	QMessageBox::information(this, "Fichier", "Vous avez sélectionné :\n" + fichier);
    	cheminClef->setText(fichier);
    }
    

    Le QMessageBox::information c'est pour tester ;)
    Le problème se trouve au niveau du cheminClef->setText(fichier);
    Le programme plante arrivé à cette ligne... pourtant l'information est bien une Qstring !
    Comment faire ? Avec des slots ? Mais aucun signal de QFileDialog n'indique le chemin du fichier sélectionné...
    Mecri d'avance pour votre aide précieuse !
    • Partager sur Facebook
    • Partager sur Twitter
      12 juin 2008 à 10:36:58

      QLineEdit cheminClef = .... pas de '*' ici.

      Pareil pour tous les autres : QPushButton etc
      • Partager sur Facebook
      • Partager sur Twitter
        12 juin 2008 à 10:38:16

        Il ne faut pas travailler avec des pointeurs ?
        Edit :
        Si j'enlève les *, j'ai cette erreur :
        FenPrincipale.cpp: In constructor `FenPrincipale::FenPrincipale()':
        FenPrincipale.cpp:46: error: conversion from `QLineEdit*' to non-scalar type `QL
        ineEdit' requested
        FenPrincipale.cpp:52: error: no matching function for call to `QHBoxLayout::addW
        idget(QLineEdit&)'
        ../Qt/4.4.0/include/QtGui/../../src/gui/kernel/qboxlayout.h:87: note: candidates
         are: void QBoxLayout::addWidget(QWidget*, int, Qt::Alignment)
        FenPrincipale.cpp:23: warning: unused variable 'menuAide'
        FenPrincipale.cpp:24: warning: unused variable 'menuApropos'
        mingw32-make[1]: *** [release/FenPrincipale.o] Error 1
        mingw32-make[1]: Leaving directory `D:/testQT'
        mingw32-make: *** [release] Error 2
        • Partager sur Facebook
        • Partager sur Twitter
          12 juin 2008 à 10:42:57

          bas sa dépend. Excuse j'ai pas bien lu...
          t'a un FenPrincipale.hpp ou tu déclares ta classe? si oui alors tu déclares tes pointeurs dans le .hpp comme ce ci : QPushButton *bouton;

          puis dans ton .cpp tu les utilise comme ça :
          bouton = new QPushbutton()
          • Partager sur Facebook
          • Partager sur Twitter
            12 juin 2008 à 10:44:04

            le .h
            #ifndef HEADER_FENPRINCIPALE
            #define HEADER_FENPRINCIPALE
            
            #include <QtGui>
            
            class FenPrincipale : public QMainWindow
            {
            	Q_OBJECT
            	public:
            		FenPrincipale();
            	
            	public slots:
            		// méthode pour choisir une clé
            		void choisirClef();
            	
            	private:
            	// menu
            		// fichier
            			QAction *actionCrypter;
            			QAction *actionQuitter;
            		
            	// zone centrale
            	QWidget *zoneCentrale;
            	QGroupBox *groupBox;
            	
            	QLabel *label1;
            	QLineEdit *clef;
            	QLineEdit *cheminClef;
            	QPushButton *bouton2;
            	QString fichier;
            };
            
            #endif
            

            Edit :
            Oui ! merci ! ça marche en mettant cheminClef = new QLineEdit(); !
            • Partager sur Facebook
            • Partager sur Twitter
              12 juin 2008 à 10:47:16

              Ouai donc voilà faut que tu fasses comme ça dans ton constructeur :
              cheminClef = new QLineEdit();

              pour getOpenFileName test comme ça:
              QString fichier = QFileDialog::getOpenFileName(this, "Sélectionner un fichier", "C:", "All (*.*)");
              



              bon si sa marche c'est cool. Mais vas jeter un oeil sur le cour de POO quand même ;)

              • Partager sur Facebook
              • Partager sur Twitter

              [QT] Modifier un widget

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown