Сигналы меню Qt Mainwindow
У меня есть "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 ответ
Вы должны указать полную спецификацию функции в параметрах SIGNAL и SLOT (но без имен аргументов). Как это:
connect(mwnd->menuBar(),
SIGNAL(triggered(QAction*)),
this,
SLOT(appMenuTriggered(QAction*)));
Если вы отлаживаете такой код в Qt Creator, connect
функция будет записывать диагностические сообщения об ошибках в панель вывода приложения, когда не обнаружит сигнал или слот. Я предлагаю вам найти эти сообщения об ошибках до того, как вы решите свою проблему, чтобы вы знали, где искать в будущем. Очень легко неправильно понять сигналы и слоты!