我有处理 QMainWindow 的“Core”对象。
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;
};
核心.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
函数会将诊断错误消息写入“应用程序输出”窗格。我建议您在解决问题之前先找到这些错误消息,以便知道将来要查找的位置。很容易弄错信号和槽!