2012-05-06 13 views
5

Mi problema es que cuando hago clic en un elemento en una QMenuBar, la ranura correspondiente se llama dos veces. Estoy usando Qt 4.8.1. No estoy usando Qt Designer ni la función de "conexión automática". Aquí está mi fragmento de código:¿Por qué esta ranura se llama dos veces?

#include <iostream> 
#include <QWidget> 
#include <QMenuBar> 

class MyWidget : public QWidget 
{ 
     Q_OBJECT 
     public: 
       MyWidget(QWidget *parent = 0) : QWidget(parent) 
       { 
         QMenuBar *menu = new QMenuBar(this); 
         menu->addAction("Click here"); 
         menu->addAction("Or here"); 
         connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(handleAction(QAction*))); 
       } 

     public slots: 
       void handleAction(QAction *action) 
       { 
         std::cout << "Triggered" << std::endl; 
       } 

}; 

Y la función principal:

#include "main.h" 
#include <QApplication> 

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv); 
    MyWidget w; 
    w.show(); 

    return app.exec(); 
} 

Si compila este (con el archivo MOC), verá que al hacer clic en "Haga clic aquí" imprimirá " Activado "una vez" y "O aquí" dos veces. No entiendo por qué.

¿Qué estoy haciendo mal?

+0

lo siento, no compilar el código y no soy un mago qt. Pero revisé el ejemplo de las páginas de qt de nokia (http://qt-project.org/doc/qt-4.8/mainwindows-menus.html) y me parece que conectan la señal disparada a un espacio en un lugar diferente. manera: mientras conecta SIGNAL (disparada (QAction *)) conectan SIGNAL (disparada()). No puedo decir si hace una diferencia, pero esto es un comentario y no una respuesta :-) – Matthias

+0

@Matthias: conectan las acciones a las ranuras directamente en esos ejemplos, pintoch es la señal de conexión QMenuBar, que se supone que funciona como él tiene la intención de. (Crear y conectar las acciones directamente sería una solución alternativa, pero no agradable; necesitaría más máquinas tragamonedas o un mapeador de señales ...) – Mat

+0

No está claro lo que * intenta * hacer aquí, pero sospecho que es algo diferente de lo que piensas. Esto ni siquiera producirá una barra de menú en OSX. Debería crear objetos 'QMenu' y agregarlos a' QMenuBar'. Sospecho que solo está enviando toda la lista de acciones a su ranura. –

Respuesta

2

Obtengo el mismo resultado incorrecto que en Windows 7 x64 usando Qt 4.8.1. Esto ciertamente parece un error.

Hubo un bug reported and fixed para lo que parece ser el mismo comportamiento en Mac OS X. A pesar de que se ha cerrado, hay un solo comentario sobre el mismo que observaron este problema en Windows 7.

Creo que la presentación un nuevo informe de error sería una buena idea.

+0

Creo un problema nuevo en el rastreador de errores. Gracias por su confirmación. – pintoch

Cuestiones relacionadas