Action d'une classe vers la classe QMainWindow
Bonjour,
Je débute avec Qt
J'ai déjà réussit à passer des valeurs d' une classe vers une autre, mais ici
je suis vraiment bloqué.
A partir de class smallEditorWindow je veux passer les valeurs ( int) générées par des
boutons vers class MainWindow
Voici le schéma de mon programme
fichier.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| #include "mainwindow.h"
class smallEditorWindow : public QDialog
{
Q_OBJECT
public:
smallEditorWindow();
private:
QPushButton *m_boutonUn; // pour envoyer un valeur vers MainWindow
QPushButton *m_boutonDeux;
int m_touche;
MainWindow *m_wind; // refusé à la compilation !!!!
};#endif |
Normalement il faudrait un objet MainWindow dans la classe smallEditorWindow
Malheureusement le compilateur n' accepte pas cet objet
Voici le message d' erreur à la compilation:
erreur : 'MainWindow' does not name a type
MainWindow *m_wind;
fichier.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include "smalleditorwindow.h"
smallEditorWindow:: smallEditorWindow(){
connect(m_boutonUn,SIGNAL(clicked()),this, SLOT(setTouche1()));
connect(m_boutonDeux,SIGNAL(clicked()),this,SLOT(setTouche2()));
}
//Jusque là cela fonctionne, les valeurs sont bien transmises à m_touche
void smallEditorWindow::setTouche1(){
m_touche = 1;
}
void smallEditorWindow::setTouche2(){
m_touche = 2;
} |
Le problème:
Je voudrais que chaque fois que m_boutonUn ou m_boutonDeux est cliqué, la valeur de (int) m_touche
soit transmise à la fonction MainWindow :: setEditor(int v)
Voici la classe qui doit recevoir la valeur des boutons. Là il faut trouver une soluton!
fichier.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| #include "smalleditorwindow.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
void setEditor(int);// accesseur pour récupérer l' action d' un bouton dans la classe
// smallEditor Window
private:
smallEditorWindow *m_small;
};#endif |
fichier .cpp
Code:
1 2 3 4 5 6 7 8 9 10 11
| #include "mainwindow.h"
MainWindow::MainWindow() {
}
//Ici on affiche dans l' editeur le texte de MainWindow "1" ou "2" à chaque click sur boutonUn
//ou boutonDeux dans la classe smallEditorWindow
void MainWindow::setEditor(int v){
if( v==1)textEdit->insertPlainText("1");
if( v==2)textEdit->insertPlainText("2");
} |
Toutes les autres commandes partent de MainWindow vers les autres classes,
je ne sais donc pas inverser les includes.
Que faire pour que cela fonctionne normalement ?
Un grand merci à celui qui pourra faire le pont entre ces deux classes
Action d' une classe vers classe QMainWindow
Concerne réponse de :uriotcea
Merci pour votre réponse,
Le problème ne semble toujours pas résolu, je ne sais pas si j' ai bien compris
votre réponse, j' envoie donc un résumé du programme avec la correction supposée.
(ajouté "class MainWindow;" dans class smallEditor)
Dans un premier temps, je n' ai plus d' erreur à la compilation, mais rien ne sort à l' écran.
Après quelques minutes, un message :Le programme s'est terminé subitement.
voici les données :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "smalleditor.h"
class smallEditor;
class MainWindow : public QMainWindow {
Q_OBJECT
public slots:
void setTouche(QChar);
private:
QTextEdit *textEdit;
smallEditor *m_small;
};
#endif// MAINWINDOW_H |
mainwindow.cpp
Code:
1 2 3 4 5 6
| #include "mainwindow.h"
MainWindow::MainWindow() {
m_small = new smallEditor;
textEdit = new QTextEdit;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #ifndef SMALLEDITOR_H
#define SMALLEDITOR_H
#include "mainwindow.h"
class MainWindow; // ajouté suivant réponse
class smallEditor: public QDialog {
Q_OBJECT
public:
smallEditor();
private:
MainWindow * m_mainW;
};
#endif // SMALLEDITOR_H |
smalleditor.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| smallEditor :: smallEditor() {
m_mainW = new MainWindow;
initialyseClavier();
}
void smallEditor ::initialyseClavier(){
// Action de départ de la discussion
connect(m_boutonUn,SIGNAL(clicked()),this, SLOT(m_mainW->setTouche("1")));
connect(m_boutonDeux,SIGNAL(clicked()),this, SLOT(m_mainW->setTouche("2")));
}
void MainWindow ::setTouche(QChar c){
// But de la discussion:
// Aficher "c" dans MainWindow par Click m_boutonUn(Deux etc..) de class smallEditor;
textEdit->insertPlainText(c);
} |
A la compilation :
Citation:
10:13:59: Exécution des étapes pour le projet sdi...
10:13:59: Configuration inchangée, étape qmake sautée.
10:13:59: Débute : "E:\QT\Tools\mingw530_32\bin\mingw32-make.exe"
E:/QT/Tools/mingw530_32/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'E:/QT/PROJETS/modif/calcGraph4'
mingw32-make[1]: Nothing to be done for 'first'.
mingw32-make[1]: Leaving directory 'E:/QT/PROJETS/modif/calcGraph4'
10:13:59: Le processus "E:\QT\Tools\mingw530_32\bin\mingw32-make.exe" s'est terminé normalement.
10:13:59: Temps écoulé : 00:01
Etrange !!! je n' ai rien qui apparait sur mon écran
Après quelques minutes j' ai ce message ( contradictoire) ?????
Citation:
Démarrage de E:\QT\PROJETS\modif\calcGraph4\debug\sdi.exe...
Le programme s'est terminé subitement.
E:\QT\PROJETS\modif\calcGraph4\debug\sdi.exe crashed.