benito59650 | 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 :
- #include "MainWindow.h"
- MainWindow::MainWindow(const Entreprise* E, int val) : QWidget(), m_periode(0)
- {
- Utilisateur U;
- InformationAlea IA;
- InformationEntreprise IE(E,this);
- Courbe C(val);
- C.ajouterValeur(E);
- m_tableau=new QTabWidget;
- m_tableau->addTab (U.getPage1(), "Accueil" );
- m_tableau->addTab (IA.getPage2(), "Informations" );
- m_tableau->addTab (IE.getPage3(), "Entreprises" );
- m_tableau->addTab (C.getMyPlot(), "Graphes" );
- m_boutonSuite=new QPushButton("Passer a la periode suivante", this);
- QObject::connect(m_boutonSuite, SIGNAL(clicked ()), this, SLOT(passerPeriodeSuivante()));
- }
- void MainWindow::passerPeriodeSuivante()
- {
- m_periode++;
- emit periodeSuivante();
- }
|
Page concernée de mon QTabWidget
Code :
- #include "InformationEntreprise.h"
- InformationEntreprise::InformationEntreprise(const Entreprise* E, MainWindow* W) : QWidget()
- {
- m_view=new MyTreeView(E,this,this);
- QObject::connect(W, SIGNAL(periodeSuivante()), this, SLOT(passerPeriodeSuivante()));
- }
- QWidget* InformationEntreprise::getPage3()
- {
- return m_view;
- }
- void InformationEntreprise::passerPeriodeSuivante()
- {
- emit periodeSuivante();
- }
|
Page avec le QTreeView
Code :
- #include "mytreewidget.h"
- MyTreeView::MyTreeView(const Entreprise* E, InformationEntreprise* IE, QWidget * parent) : QTreeView(parent), m_entreprises(E[0].getNombreDEntreprise())
- {
- for (int i=0; i<25; i++) m_entreprises[i]=E[i];
- setModel(m_model);
- m_tabwindow= new WidgetTableauEntreprise(E,this);
- QObject::connect(IE, SIGNAL(periodeSuivante()), this, SLOT(passerPeriodeSuivante()));
- }
- void MyTreeView::passerPeriodeSuivante()
- {
- emit periodeSuivante();
- }
|
Fenêtre avec les tableaux:
Code :
- #include "MyTableau.h"
- MyTableau::MyTableau(int rows, int columns, Entreprise E, QWidget * parent, WidgetTableauEntreprise* WTE) : m_periode(0) //, QTableWidget(rows,columns,parent )
- {
- m_E=E;
- m_tableWidget1=new QTableWidget(5, 4, parent);
- m_tableWidget2=new QTableWidget(3, 4, parent);
- QObject::connect(m_suivant, SIGNAL(clicked()), this, SLOT(passerPeriodeSuivante()));
- }
- void MyTableau::populateTableWidget1(QTableWidget *tableWidget, Entreprise E)
- {
- // Cette méthode rempli le tableau en fonction de la période
- }
- void MyTableau::populateTableWidget2(QTableWidget *tableWidget, Entreprise E)
- {
- // Cette méthode rempli le tableau en fonction de la période
- }
- void MyTableau::passerPeriodeSuivante()
- {
- m_periode+=1;
- emit periodeSuivante();
- populateTableWidget1(m_tableWidget1, m_E);
- m_tableWidget1->setGeometry(0,0,500, 300);
- populateTableWidget2(m_tableWidget2, m_E);
- m_tableWidget2->setGeometry(0,300,500, 300);
- }
|
Pouvez-m'aider?
Merci |