Probleme Qt C++

Fermé
bazart - 5 janv. 2009 à 15:06
 bazart - 7 janv. 2009 à 16:39
Bonjour,

j'ai crée ma fenetre avec Qt designer et je ne sait pas ou implémenter mes fonctions ...

main.cpp
#include <QApplication>
#include <QtGui>
#include "ui_tell.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QDockWidget *fenetre = new QDockWidget;
    Ui::FenTell ui;
    ui.setupUi(fenetre);

    fenetre->show();

    return app.exec();
}


FenetreTell.cpp
#include "FenetreTell.h"

FenTell::FenTell(QDockWidget *parent) : QDockWidget(parent)
{
    setupUi(this); // A faire en premier

}

void FenTell::on_ChercherFichier_clicked()
{

QString dossier = QFileDialog::getExistingDirectory(this);

}


FenetreTell.h
#ifndef HEADER_FENETRETELL
#define HEADER_FENETRETELL

#include <QtGui>
#include "ui_tell.h"

class FenTell : public QDockWidget, private Ui::FenTell
{
    Q_OBJECT

    public:
        FenTell(QDockWidget *parent = 0);

    private slots:

     void on_ChercherFichier_clicked();

};


#endif


Merci par avance.
A voir également:

11 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
5 janv. 2009 à 16:16
par défaut les implementation vont dans les .cpp.
Je ne saisi pas bien ton problème.
0
les implémentation c'est par exemple :
void FenTell::on_ChercherFichier_clicked()
{

QString dossier = QFileDialog::getExistingDirectory(this);

}


non ?

Le probleme c'est que je me retrouve avec une erreur quand je fait mon make :

FenetreTell.cpp:17: error: ISO C++ forbids declaration of `on_ChercherFichier_cl
icked' with no type
FenetreTell.cpp:17: error: prototype for `int FenTell::on_ChercherFichier_clicke
d()' does not match any in class `FenTell'
FenetreTell.h:16: error: candidate is: void FenTell::on_ChercherFichier_clicked(
)
FenetreTell.cpp:17: error: `int FenTell::on_ChercherFichier_clicked()' and `void
 FenTell::on_ChercherFichier_clicked()' cannot be overloaded
mingw32-make[1]: *** [debug/FenetreTell.o] Error 1
mingw32-make[1]: Leaving directory `C:/Documents and Settings/Administrateur/Bur
eau/C/tell'
mingw32-make: *** [debug] Error 2


bref je sait pas ou mettre cette séquence sans que ca bug ...

En tout cas merci pour ta réponse rapide.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
5 janv. 2009 à 17:58
oui, mais il faut aussi délarer la méthode dans la classe et dans le .h !
0
Ce qui me gêne dans ton programme c'est la déclaration de la classe; tu déclares un objet Ui::'FenTell' alors que tu as créé une classe 'FenTell' à laquelle tu ne fais jamais appel.
Je pense qu'en fait il te faut écrire le main plus classiquement de cette manière:
#include <QApplication>
#include "FenetreTell.h"

int main(int argc, char ** argv)
{
	QApplication app( argc, argv );
	FenetreTell win;
	win.show(); 
	return app.exec();
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Désolé de répondre aussi tard mais je gère ce projet de développement uniquement l'après midi ...

J'ai récuperer le main de loupius et remplacer l'ancien et ca ne m'affiche que 2 erreurs comme au dessus.


Si je comprend bien char sniper j'ai inversé
void on_ChercherFichier_clicked();


et

void FenTell::on_ChercherFichier_clicked()
{

QString dossier = QFileDialog::getExistingDirectory(this);

}


?

merci pour les réponses.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
6 janv. 2009 à 16:33
Non, autant pour moi, j'ai mal lu.
essai de mettre des ";" après tes fonctions.
0
Est-tu sûr d'avoir bien déclaré:
void FenTell::on_ChercherFichier_clicked()
dans le fichier 'FenetreTell.cpp'
Les erreurs sont-elles toujours les mêmes?
0
Bonne nouvelle je n'ai plus d'erreur !

Par contre ma fonction (copier l'adresse d'un dossier sélectionné par l'utilisateur ne se lance toujours pas lorsque j'appuie sur mon bouton ChercherFichier .

#include "FenetreTell.h"

FenTell::FenTell(QDockWidget *parent) : QDockWidget(parent)
{
    setupUi(this); 

}



void FenTell::on_ChercherFichier_clicked()
{

QString dossier = QFileDialog::getExistingDirectory(this);


}
0
C'est sans doute que la connexion n'a pas été réalisée.
Il faut retourner sous Designer et faire la connexion.
0
Tu pourrais m'expliquer comment on fait ?

Parceque je croyait que l'autoconnect ou un truc du genre marchait a partir du moment qu'on respectait la syntaxe: on_NomWidget_Signal() .

En tout cas merci de votre aide.
0
Je ne sais pas si l'autoconnect existe... j'ai de sérieux doute, mais pourquoi pas.
2 solutions:
- solution logicielle: la plus simple
FenTell::FenTell(QDockWidget *parent) : QDockWidget(parent)
{
    setupUi(this); 
    connect (nomDuBoutonDeclareDansQtDesigner, SIGNAL(clickerd()), this, SLOT(on_ChercherFichier_clicked()));
}

- solution graphique: la plus rapide (si on sait!)
Cliquer sur l'icone adéquate (qui permet de réaliser des connexions (prière de ne pas rire))
Passer la souris sur le bouton, il doit être mis en valeur
Cliquer, maintenir enfoncé et relâcher sur un autre objet (tu vas voir des noms apparaître)
Une fenêtre s'ouvre et là tu choisiras les signaux; tu peux même en rajouter
La première fois c'est pas évident.
0
Effectivement l'autoconnect existe (tout est dans la doc de Qt), il faut bien respecter la syntaxe suivante:
void on_<widget name>_<signal name>(<signal parameters>);
Le widget est-il bien 'ChercherFichier' ? Ce nom n'est d'ailleurs pas philosophiquement correct, car, par convention, on réserve les mots commençant par une majuscule pour les noms de classe; mais ce n'est pas ça qui empêchera de fonctionner.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 janv. 2009 à 09:42
L'autoconnect, ça me dit quelque chose. Mais je ne connais pas la syntaxe et je n'ai jamais utiliser.
Il faut peut être faire une passe d'un outils Qt avant ?
Sinon, qu'a tu fais pour résoudre ton prolème de compilation, je suis curieu de savoir.
0
Désolé pour la syntaxe, c'est un des mes premiers programme avec Qt et C++ j'ai un peu de mal avec toute ces convention ^^...

j'ai trouver ca vis a vis de l'autoconect et de sa déclaration :

"Il suffira d'ajouter la ligne suivante dans le constructeur de la fenêtre pour bénéficier de toute la puissance de l'Auto-Connect : QMetaObject::connectSlotsByName(this); "

Et quand je vais voir mon ui_tell.h je trouve :

    QMetaObject::connectSlotsByName(FenTell);


Sinon je ne sait pas trop comment j'ai fait partir les erreurs, puisque les fichier sont identiques...
0