Сигналы меню Qt Mainwindow - PullRequest
       33

Сигналы меню Qt Mainwindow

1 голос
/ 24 ноября 2011

У меня есть объект "Core", который обрабатывает QMainWindow.
Код Core.h

class Core : public QObject
{
    Q_OBJECT
public:
    explicit Core(QObject *parent = 0);
    ~Core();
    void appInit();
    int getAuth();

public slots:
    void appExit();

private slots:
    void appMenuTriggered(QAction *action);

private:
    void preInit();
    MainWindow *mwnd;
};

Код Core.cpp

Core::Core(QObject *parent) : QObject(parent)
{
    qDebug() << "Core::Constructor called";
    preInit();
}

Core::~Core()
{
    delete mwnd;
    qDebug() << "Core::Destructor called";
}

int Core::getAuth()
{
    LoginDialog *login = new LoginDialog();
    int r = login->exec();
    delete login;
    return r;
}

void Core::appExit() // connected to qapplication aboutToQuit
{
    qDebug() << "Core::appExit called";
}

void Core::preInit()  // called after getAuth im main.cpp
{
    qDebug() << "Core::preInit called";
}

void Core::appMenuTriggered( QAction *action )
{
    qDebug() << "action triggered";
}

void Core::appInit()
{
    mwnd = new MainWindow();
    mwnd->show();
    qDebug() << "Core::appInit called";
}

Я пытаюсь подключить основное окноСигнал меню в слот ядра выглядит так:

connect(mwnd->menuBar(), SIGNAL(triggered()), this, SLOT(appMenuTriggered()));

Но это не работает.Я новичок в C ++ и Qt.Как это подключить?Или, может быть, есть лучший способ обработки действий главного окна для других частей программы.

UPD Проблема решена.Забудьте включить QMenuBar

1 Ответ

7 голосов
/ 24 ноября 2011

Вы должны указать полную спецификацию функции в параметрах SIGNAL и SLOT (но без имен аргументов).Например:

connect(mwnd->menuBar(),
        SIGNAL(triggered(QAction*)),
        this,
        SLOT(appMenuTriggered(QAction*)));

Если вы отлаживаете такой код в Qt Creator, функция connect будет записывать диагностические сообщения об ошибках в панель вывода приложения, когда не обнаружит сигнал или слот.Я предлагаю вам найти эти сообщения об ошибках до того, как вы решите свою проблему, чтобы вы знали, где искать в будущем.Очень легко неправильно понять сигналы и слоты!

...