2010-04-28 5 views
0

J'essaie de faire une interface graphique simple avec QT 4.6. je l'ai fait une classe separete qui représente la barre de menu:Simple menubar utilisant Qt4

MenuBar::MenuBar() 
{ 
    aboutAct = new QAction(tr("&About QT"), this); 
    aboutAct->setStatusTip(tr("Show the application's About box")); 
    connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); 

    quitAct = new QAction(tr("&Quit"),this); 
    quitAct->setStatusTip(tr("Exit to the program")); 
    //connect(quitAct, SIGNAL(triggered()), &QApp, SLOT(quit())); 

    menuFile = new QMenu("File"); 
    menuFile->addAction(quitAct); 

    menuLinks = new QMenu("Links"); 

    menuAbout = new QMenu("Info"); 
    menuAbout->addAction(aboutAct); 


    addMenu(menuFile); 
    addMenu(menuLinks); 
    addMenu(menuAbout); 
} 

je ne peux pas connecter le signal du quitAct avec la fente quitter de l'application principale sans doute parce qu'il est pas visible de la classe MenuBar ..

//connect(quitAct, SIGNAL(triggered()), &QApp, SLOT(quit())); 

comment puis-je le faire?

Répondre

3

Vous avez une faute de frappe. :)

Dans: connect(quitAct, SIGNAL(triggered()), &QApp, SLOT(quit()));

nom La variable est QAPP, pas QAPP. Cela mis à part, balpha a tout dit. Il est donc soit:

connect(quitAct, SIGNAL(triggered()), qApp, SLOT(quit()));
ou
connect(quitAct, SIGNAL(triggered()), QApplication::instance(), SLOT(quit()));

0
  1. Vous pouvez faire votre variable quitAct comme public dans la classe MenuBar, puis de la classe principale de la fenêtre connecter menuBar-> quitAct vous quittez() la fonction, comme

    connecter (menuBar-> quitAct, SIGNAL (cliqué()), ceci, SLOT (quitter()));

  2. Vous pouvez créer SIGNAL publique en classe MenuBar, par exemple quitSignal(), et à partir de la fenêtre principale/classe de dialogue se connecter à la fonction quitter() lorsque ce signal émet.

  3. Vous ne pouvez pas utiliser le code de classe MenuBar fo \ rom en dehors de la fenêtre principale/classe de dialogue, et il suffit de mettre en une seule fonction, par exemple:

    createMenuBar void() {... }

Bonne chance.

+0

Toutes les méthodes sont si "sale" et non le style Qt. Et vous n'avez pas repéré d'erreur dans son code –

5

Utilisez le static instance() method de la classe QApplication ou le qApp macro pour obtenir le pointeur vers l'instance d'application. Notez qu'il s'agit d'un pointeur, passez donc qApp à connect(), et non &qApp.