Je voudrais faire une application qui possède plusieurs onglets (QtabWidget). J'ai conçus l'interface avec le QT Designer et j'utilise QT 4.0 . Pour rendre le code plus lisible je veux mettre le code de chaque onglet dans une classe différente.
Je n'arrive pas à connecter directement un signal de la classe principale (Form_Principale) avec un slot d'une classe (C_Tab_Projet) qui gère un onglet. Je doit passer par un slot de la classe principale ce dernier appel la fonction voulu: ce qui n'est pas très propre...
Voici le code utilise (contient que les partis qui posent problème...):
Le code de "FenetrePrincipal.hpp"
#include "TabProjet.hpp"
#include "ui_Form_Principale.h"
class Form_Principale : public QMainWindow {
Q_OBJECT
public:
Form_Principale();
private:
Ui::Form_Principale ui;
private slots:
void SlotApropos();
/* Onglet projet */
void Slot_Projet_BDR_Parcourir();/***Le slot que je voudrais ne pas avoir à utiliser***/
private:
C_Tab_Projet *Tab_Projet;/***La classe qui contient le slot a appeller***/
};
Le code de "FenetrePrincipal.cpp"
#include <QtGui>
#include <QDialog>
#include "FenetrePrincipale.hpp"
/*Constructeur par défaut*/
Form_Principale::Form_Principale(){
Tab_Projet=new C_Tab_Projet(); /** Instanciation de la classe
ui.setupUi(this);
}
/*Création des action*/
void Form_Principale::CreerActions(){
/*** CE QUE JE VOUDRAIS FAIRE: POURQUOI CA MARCHE PAS????? ***/
//QObject::connect(ui.button_Projet_BDR_Parcourir, SIGNAL(clicked()), Tab_Projet, SLOT(Tab_Projet->BDR_Parcourir(this)));
/*** celui qui marche : pas "propre"...***/
QObject::connect(ui.button_Projet_BDR_Parcourir, SIGNAL(clicked()), this, SLOT(Slot_Projet_BDR_Parcourir()));
}
/*** le slot que je voudrais ne pas avoir a utiliser ***/
void Form_Principale::Slot_Projet_BDR_Parcourir(){
Tab_Projet->BDR_Parcourir(this);
}
Le code de "TabProjet.hpp"
#ifndef TAB_PROJET_H
#define TAB_PROJET_H
#include <QWidget>
#include <QObject>
class C_Tab_Projet: public QObject{
Q_OBJECT;
public slots:
void BDR_Parcourir(QWidget *); //*** le slot que je veux appeller depuis la classe principal...
};
Le code de "TabProjet.cpp"
/** L'action a réaliser **/
void C_Tab_Projet::BDR_Parcourir(QWidget * parent){
QMessageBox::information(parent, "Test","Ceci est un test!");
}
[quote]
Je n'arrive pas à connecter directement un signal de la classe principale (Form_Principale) avec un slot d'une classe (C_Tab_Projet) qui gère un onglet. Je doit passer par un slot de la classe principale ce dernier appel la fonction voulu: ce qui n'est pas très propre... [/quote]
Pourquoi tu n'arrives pas?
En mettant :
[code]connect(Form_Principale,SIGNAL(le_signal()),C_Tab_Projet,SLOT(tonSLOT()));[/code]
Cela ira.
__________________________
Be C++
[url=http://blog.mestan.fr/]Mon Blog (C++, Intelligence Artificielle, Prolog)[/url]
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
Comme il est marqué dans le premier message, dans la partie "Le code de [-i]FenetrePrincipal.cpp[/i]" à la fonction [-i]void Form_Principale::CreerActions()[/i] (le code est marqué en commentaire, celui qui marche est non commenté...), j'ai testé:
[code]QObject::connect(ui.button_Projet_BDR_Parcourir, SIGNAL(clicked()), Tab_Projet, SLOT(Tab_Projet->BDR_Parcourir(this)));[/code]
Mais ca ne marche pas: la compilation se fait avec succès, mais lorsque j'appuis sur le bouton rien ne se passe. D'où mon interrogation...
Merci quand même de s'être intéressé a mon problème!
Jai aussi testé :
[code]QObject::connect(ui.button_Projet_BDR_Parcourir, SIGNAL(clicked()), Tab_Projet, SLOT(C_Tab_Projet::BDR_Parcourir(this)));
QObject::connect(ui.button_Projet_BDR_Parcourir, SIGNAL(clicked()), Tab_Projet, SLOT(Tab_Projet::BDR_Parcourir(this)));
QObject::connect(ui.button_Projet_BDR_Parcourir, SIGNAL(clicked()), Tab_Projet, SLOT(Tab_Projet->BDR_Parcourir(this)));
QObject::connect(ui.button_Projet_BDR_Parcourir, SIGNAL(clicked()), Tab_Projet, SLOT(C_Tab_Projet.BDR_Parcourir(this)));
QObject::connect(ui.button_Projet_BDR_Parcourir, SIGNAL(clicked()), Tab_Projet, SLOT(Tab_Projet.BDR_Parcourir(this)));[/code]
Ca compile mais ne marche toujours pas ! :(:
Quand je met
QObject::connect(ui.button_Projet_BDR_Parcourir, SIGNAL(clicked()), [b][-i]C_Tab_Projet[/i][/b], SLOT(C_Tab_Projet.BDR_Parcourir(this)));
j'ai une erreur de compilation :x:
Est ce qui y a quelque chose qui ne va pas dans ma déclaration de "class C_Tab_Projet" (dans le fichier "Tab_Projet.hpp" ??? Ou autres chose???
De nouveau, merci d'avance à ceux qui voudrons prendre un peu de temps pour mon problème ! :cry:
ERREUR BBCODE SUR CE MESSAGE : - Une balise -i n'est pas fermée !