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

  FORUM HardWare.fr
  Programmation
  C++

  problème Signal/Slot avec classes imbriquées avec Qt

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème Signal/Slot avec classes imbriquées avec Qt

n°1730141
benito5965​0
Posté le 09-05-2008 à 10:57:33  profilanswer
 

Bonjour à tous!
 
( linux)
Je suis en train de créer une interface graphique pour un logiciel, et j'ai un petit soucis. Alors je vais essayer d'être clair :
-j'ai une fenêtre principale
-dans cette fenêtre j'ai mis un QTabWidget
-sur une des pages de ce QTabWidget j'ai un objet qui hérite de QTreeView
-quand je clique sur un des items de cette objet j'ai une fenêtre avec des tableaux qui s'ouvre avec des infos sur l'item cliqué.
 
Voilà en gros mon programme. J'ai tout codé de manière indépendante, puis j'ai tout assemblé. Mon problème maintenant c'est que je veux palcer un bouton sur la fenêtre principale, et que lorsque je clique sur celui-ci, ça affecte tous les objets qui suivent y compris les tableaux que j'ouvre à la fin. Quelle manière serait la plus simple?
 
Moi ce que j'ai fais, c'est faire remonter un signal à tous les objets, en créant des signaux et des slots: quand je clique sur le bouton de la fenêtre principale ça emet le signal alpha, lorsque la page du QTabWidget reçoit ce signal elle emet aussi le signal alpha, idem pour le QTreeView, et lorsque mon tableau reçoit le signal alpha il fait ce qu'il a à faire.
Mais cela ne fonctionne pas. J'ai l'impression que je signal n'est transmis qu'une fois c'est-à-dire de la fenêtre principale à la page de mon QTabWidget.
 
 
Voilà les bons de codes intéressants:
Fenêtre principale:

Code :
  1. #include "MainWindow.h"
  2. MainWindow::MainWindow(const Entreprise* E, int val) : QWidget(), m_periode(0)
  3. {
  4. Utilisateur U;
  5. InformationAlea IA;
  6. InformationEntreprise IE(E,this);
  7. Courbe C(val);
  8. C.ajouterValeur(E);
  9. m_tableau=new QTabWidget;
  10. m_tableau->addTab (U.getPage1(), "Accueil" );
  11. m_tableau->addTab (IA.getPage2(), "Informations" );
  12. m_tableau->addTab (IE.getPage3(), "Entreprises" );
  13. m_tableau->addTab (C.getMyPlot(), "Graphes" );
  14. m_boutonSuite=new QPushButton("Passer a la periode suivante", this);
  15. QObject::connect(m_boutonSuite, SIGNAL(clicked ()), this, SLOT(passerPeriodeSuivante()));
  16. }
  17. void MainWindow::passerPeriodeSuivante()
  18. {
  19. m_periode++;
  20. emit periodeSuivante();
  21. }


 
Page concernée de mon QTabWidget

Code :
  1. #include "InformationEntreprise.h"
  2. InformationEntreprise::InformationEntreprise(const Entreprise* E, MainWindow* W) : QWidget()
  3. {
  4. m_view=new MyTreeView(E,this,this);
  5. QObject::connect(W, SIGNAL(periodeSuivante()), this, SLOT(passerPeriodeSuivante()));
  6. }
  7. QWidget* InformationEntreprise::getPage3()
  8. {
  9. return m_view;
  10. }
  11. void InformationEntreprise::passerPeriodeSuivante()
  12. {
  13. emit periodeSuivante();
  14. }


 
Page avec le QTreeView

Code :
  1. #include "mytreewidget.h"
  2. MyTreeView::MyTreeView(const Entreprise* E, InformationEntreprise* IE, QWidget * parent) : QTreeView(parent), m_entreprises(E[0].getNombreDEntreprise())
  3. {
  4. for (int i=0; i<25; i++) m_entreprises[i]=E[i];
  5. setModel(m_model);
  6. m_tabwindow= new WidgetTableauEntreprise(E,this);
  7. QObject::connect(IE, SIGNAL(periodeSuivante()), this, SLOT(passerPeriodeSuivante()));
  8. }
  9. void MyTreeView::passerPeriodeSuivante()
  10. {
  11. emit periodeSuivante();
  12. }


 
Fenêtre avec les tableaux:

Code :
  1. #include "MyTableau.h"
  2. MyTableau::MyTableau(int rows, int columns, Entreprise E, QWidget * parent, WidgetTableauEntreprise* WTE) : m_periode(0) //, QTableWidget(rows,columns,parent )
  3. {
  4.      m_E=E;
  5.      m_tableWidget1=new QTableWidget(5, 4, parent);
  6.      m_tableWidget2=new QTableWidget(3, 4, parent); 
  7.      QObject::connect(m_suivant, SIGNAL(clicked()), this, SLOT(passerPeriodeSuivante()));
  8. }
  9. void MyTableau::populateTableWidget1(QTableWidget *tableWidget, Entreprise E)
  10. {
  11.          // Cette méthode rempli le tableau en fonction de la période
  12. }
  13. void MyTableau::populateTableWidget2(QTableWidget *tableWidget, Entreprise E)
  14. {
  15.         // Cette méthode rempli le tableau en fonction de la période
  16. }
  17. void MyTableau::passerPeriodeSuivante()
  18. {
  19. m_periode+=1;
  20. emit periodeSuivante();
  21. populateTableWidget1(m_tableWidget1, m_E);
  22. m_tableWidget1->setGeometry(0,0,500, 300);
  23. populateTableWidget2(m_tableWidget2, m_E);
  24. m_tableWidget2->setGeometry(0,300,500, 300);
  25. }


 
 
Pouvez-m'aider?
 
Merci

mood
Publicité
Posté le 09-05-2008 à 10:57:33  profilanswer
 

n°1731247
IrmatDen
Posté le 13-05-2008 à 16:30:05  profilanswer
 

Salut,
 
Active la console pour voir ce que Qt dis; il peut y avoir une faute de frappe quelque part qui te sera rapporté (CONFIG += console dans le pro).
 
Au passage, pas besoin d'un slot pour ne faire qu'émettre un signal, un connect entre 2 signaux est aussi valable ;) Les règles concernant les signatures doivent être respectées bien sûr; par ex:

Code :
  1. connect(IE, SIGNAL(periodeSuivante()), this, SIGNAL(periodeSuivante()))


est tout à fait valable et évite un slot inutile. Et pas besoin de préfixer connect de QObject:: dans les classes dérivant de QObject.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  problème Signal/Slot avec classes imbriquées avec Qt

 

Sujets relatifs
Problème d'ouverture de formulaire en VBA sous Access 2007client-serveur probléme
Problème code VBA jauge verticaleclasses pour logiciel de téléchargement (Visual C++)
Probleme tableau et cellules htmlProblème d'affectation de macro à une feuille excel
[Inno Setup + VB6] Problème base Access97probleme requette sql en php!
probleme de programationProblème en Caml
Plus de sujets relatifs à : problème Signal/Slot avec classes imbriquées avec Qt


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