Qt主窗口菜单信号
我有处理QMainWindow的“核心”对象。
Core.h代码Qt主窗口菜单信号
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
你必须在SIGNAL和SLOT参数(但没有参数名称)给出全功能规格。就像这样:
connect(mwnd->menuBar(),
SIGNAL(triggered(QAction*)),
this,
SLOT(appMenuTriggered(QAction*)));
如果您在Qt Creator的调试这样的代码,该connect
功能会写诊断错误信息发送给应用输出窗格中,当它没有找到一个信号或插槽。我建议您在解决问题之前先找到这些错误消息,以便将来知道将来的位置。信号和插槽错误很容易!
+1。这些真的很有用。我想很多人会忽视他们。 –
我得到QT以下错误: '呼叫没有匹配功能的核心::连接(QMenuBar *,为const char *,芯* const的,为const char *)' 候选人是:静态布尔QObject的: :connect(const QObject *,const char *,const QObject *,const char *,Qt :: ConnectionType)' –
看起来像你从一个声明为'const'的成员函数调用'connect'(看'Core *错误消息中的const)。是对的吗? – TonyK
如果你已经解决了你的问题,你应该发布它作为答案并接受它。这样,如果提到诊断错误消息,它将使其他人更受益于 – musefan