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?
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
@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
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. –