IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

aide pour QMenuBar

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 107
    Par défaut aide pour QMenuBar
    Bonjour,

    j'ai developpe une fenetre principale avec des menus (start et exit)
    j'ai une autre classe qui m'affiche une fenetre avec des bouton.

    je veux quand je clique sur "start" , le contenu de cette deuxieme fentre s'affiche dans la fenetre principale (dans le centre)

    Comment je pourrais faire cela ?

    merci d'avance

    voici mes deux classes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags)
    	:QMainWindow(parent, flags)
    {
    	textEdit = new QTextEdit;
    	QWidget *mywidge = new QWidget;
    	setCentralWidget(mywidge);
    	setMinimumSize(200, 200);
    	resize(700,400);
    	setWindowTitle("Main Window");
    	//setBackgroundRole(QPalette::Base);
     
    	QString message = "Welcome";
    	statusBar()->showMessage(message);
     
    	startAct = new QAction("&Start",this);
    	startAct->setShortcut(tr("Ctrl+S"));
    	startAct->setStatusTip(tr("Start the game"));
     
     
    	exitAct = new QAction("&Exit", this);
    	exitAct->setShortcut(tr("Ctrl+E"));
    	exitAct->setStatusTip(tr("exit the main window"));
    	connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
     
    	filemenu = menuBar()->addMenu(tr("&File"));
    	filemenu->addAction(startAct);
    	filemenu->addAction(exitAct);
     
     
    	//toolFile = addToolBar("File");
    	//toolFile->addAction(startAct);
    	//toolFile->addAction(exitAct);
    }
    et ma deuxieme classe est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    LettersWindow::LettersWindow(QWidget *parent)
    	:QWidget(parent)
    {
     
    	QGridLayout *letters = new QGridLayout;
    	letters->setSpacing(2);
     
    	QPushButton *btn[9];
    	for(int i = 0; i < 9; i++)
    	{
    		btn[i] = new QPushButton(tr("btn"));
    		btn[i]->setFixedSize(40,40);
    		btn[i]->setFont(QFont("Arial",10,QFont::Bold));
    	}
     
    	letters->addWidget(btn[0],0,0);
    	letters->addWidget(btn[1],0,1);
    	letters->addWidget(btn[2],0,2);
    	letters->addWidget(btn[3],1,0);
    	letters->addWidget(btn[4],1,1);
    	letters->addWidget(btn[5],1,2);
    	letters->addWidget(btn[6],2,0);
    	letters->addWidget(btn[7],2,1);
    	letters->addWidget(btn[8],2,2);
     
    	setLayout(letters);
     
     
    }

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    Pour cela, il faut utiliser les signal/slot.
    Tu trouvera pas mal de chose sur le forum, la FAQ et les tuto.

    ce tuto pour bien débuter en Qt
    http://qt.developpez.com/tutoriels/introduction-qt/

    ce tuto sur les signal slot
    http://matthieu-brucher.developpez.c...t/signal-slot/

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 107
    Par défaut
    Rebonjour,

    j'ai modifie ma "MainWindow.cpp" comme ceci mais ca ne marche pas toujours!
    est ce que quelqu'un aurait une idee pour resoudre mon probleme ?

    MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags)
    :QMainWindow(parent, flags)
    {
    textEdit = new QTextEdit;
    mywidge = new QWidget;
    setCentralWidget(mywidge);
    setMinimumSize(200, 200);
    resize(700,400);
    setWindowTitle("Main Window");
    //setBackgroundRole(QPalette::Base);

    QString message = "Welcome";
    statusBar()->showMessage(message);

    startAct = new QAction("&Start",this);
    startAct->setShortcut(tr("Ctrl+S"));
    startAct->setStatusTip(tr("Start the game"));
    connect(startAct, SIGNAL(triggered()), this, SLOT(addLettersConsole(this)));


    exitAct = new QAction("&Exit", this);
    exitAct->setShortcut(tr("Ctrl+E"));
    exitAct->setStatusTip(tr("exit the main window"));
    connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));

    filemenu = menuBar()->addMenu(tr("&File"));
    filemenu->addAction(startAct);
    filemenu->addAction(exitAct);


    //toolFile = addToolBar("File");
    //toolFile->addAction(startAct);
    //toolFile->addAction(exitAct);
    }

    void MainWindow::addLettersConsole(QMainWindow *mywidget)
    {
    LettersWindow *low = new LettersWindow();
    mywidget->setCentralWidget(low);
    }
    et ma classes LettersWindow est comme ceci:
    LettersWindow::LettersWindow(QWidget *parent)
    :QWidget(parent)
    {
    QWidget *widg = new QWidget();
    letters = new QGridLayout;
    letters->setSpacing(2);

    QPushButton *btn[9];
    for(int i = 0; i < 9; i++)
    {
    btn[i] = new QPushButton(tr("btn"));
    btn[i]->setFixedSize(40,40);
    btn[i]->setFont(QFont("Arial",10,QFont::Bold));
    }

    letters->addWidget(btn[0],0,0);
    letters->addWidget(btn[1],0,1);
    letters->addWidget(btn[2],0,2);
    letters->addWidget(btn[3],1,0);
    letters->addWidget(btn[4],1,1);
    letters->addWidget(btn[5],1,2);
    letters->addWidget(btn[6],2,0);
    letters->addWidget(btn[7],2,1);
    letters->addWidget(btn[8],2,2);

    setLayout(letters);

    }
    NB: je debute avec Qt

  4. #4
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    Salut,

    dans ton code (d'ailleurs pense à ne pas inverser la balise code et la balise citation)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    LettersWindow::LettersWindow(QWidget *parent)
    :QWidget(parent)
    {
    QWidget *widg = new QWidget();     // Pourquoi un nouveau QWidget ici ??
    letters = new QGridLayout;
    letters->setSpacing(2);
    QPushButton *btn[9];   // construire les boutons
    ...
    letters->addWidget(btn[0],0,0);     // mettre dans le layout
    ...
    setLayout(letters);
    }

    Ensuite, dans ton slot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void MainWindow::addLettersConsole(QMainWindow *mywidget)
    {
    LettersWindow *low = new LettersWindow();
    mywidget->setCentralWidget(low);
    }
    C'est normal qu'à chaque clic sur start tu construises un nouveau widget ? Où est-ce que tu détruit le précédent ?

    Enfin, qu'est-ce qui ne marche pas exactement ?
    As-tu testé l'affichage de ton LettersWindow avec la méthode show() ?

  5. #5
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags)
    :QMainWindow(parent, flags)
    {
         // on peut redimensionner directement
         setMinimumSize(200, 200);
         resize(700,400);
         setWindowTitle("Main Window");
         //setBackgroundRole(QPalette::Base);
     
         // on cree les widgets qui vont bien
         mywidge = new QWidget(this);     // widget qui sera le centralWidget (serait mieux de l'appeler : centralWidget)
         verticalLayoutCentral = new QVBoxLayout(mywidge);  // a rajouter dans la declaration
         textEdit = new QTextEdit(mywidge);     // avoir des widgets parents ça mange pas de pain 
         verticalLayoutCentral->addWidget(textEdit);     // le text edit occupe toute la partie centrale
         setCentralWidget(mywidge);    // mywidge possède un layout dans lequel est textEdit et devient le centralWidget
     
         low = new LettersWindow(this);     // on peut le creer ici le low
         low->hide(); // le cacher (mais il doit deja l'être si on a pas fait de show())
     
         statusBar()->showMessage(QString("Welcome"));
     
         // creer les actions
         ...
     
         // creer les connections
         connect(startAct, SIGNAL(triggered()), this, SLOT(addLettersConsole()));     // attention aux arguments !!
         connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
     
         // creer le menu
    }
     
    void MainWindow::addLettersConsole(QMainWindow *mywidget)
    {
    //LettersWindow *low = new LettersWindow();     // un nouveau à chaque clic ?
    //mywidget->setCentralWidget(low);     // comment tu remets le textEdit ??
    setCentralWidget(low);   // setCentralWidget appartient a mainwindow, pas à mywidget !
    }
    En résumé, tu as un peu de mal à comprendre le mecanisme d'affichage des widgets.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 107
    Par défaut
    Bonjour MacPro,

    Merci d'abord pour ton aide.

    J'ai rajoute tes modifications dans mon code. Cependant j'ai toujours le meme probleme: quand je clique sur "start" , ma fenetre "LettersWindow" ne s'affiche pas.


  7. #7
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 107
    Par défaut
    Tes modifications marchent bien MacPro.

    Merci encore.

  8. #8
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    de rien
    les as-tu comprises au moins ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  2. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  3. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo