QAction不会连接到我的插槽

时间:2012-09-16 15:01:47

标签: c++ qt signals-slots qmenu

我正在尝试使用Qt制作IHM,然后我开始制作基本菜单(文件,编辑...)。 到目前为止,我的菜单中包含“文件”,然后显示“新建项目,打开项目,退出”。 看起来很棒,但我的问题是我似乎无法触发这些动作(点击它们或按快捷键)。

这是我的插槽:

void KoriganEngine::launchNewProjectWidget(){
   //External QWidget
   m_nwProj = new NewProjectWidget(NULL,Qt::MSWindowsFixedSizeDialogHint);
   m_nwProj->show();
}

如果我在连接了按钮的情况下使用此插槽,我的新QWidget会正确显示。 但是,不可能在行动中做同样的事情......

以下是我的操作和菜单的代码:

    void KoriganEngine::KG_createMenus(){
//init actions
KG_createMenuActions();

//add menu to the bar
m_fileMenu = menuBar()->addMenu("File");
m_fileMenu->addAction(m_newProjAction);
m_fileMenu->addAction(m_openProjAction);
m_fileMenu->addSeparator();
m_fileMenu->addAction(m_quitAction);

m_editMenu = menuBar()->addMenu("Edit");

}

    void KoriganEngine::KG_createMenuActions(){
m_newProjAction = new QAction("New Project...", this);
m_newProjAction->setShortcuts(QKeySequence::New);
m_newProjAction->setStatusTip(QString("Create a new Project"));
connect(m_newProjAction, SIGNAL(trigerred()), this, SLOT(slottest()));

m_openProjAction = new QAction("Open Project...", this);
m_openProjAction->setShortcuts(QKeySequence::Open);
m_openProjAction->activate( QAction::Hover);
connect(m_openProjAction, SIGNAL(trigerred()), this, SLOT(launchNewProjectWidget())); //TODO replace the slots

m_quitAction = new QAction("Exit", this);
connect(m_quitAction, SIGNAL(trigerred()), this, SLOT(quit()));

}

使用按钮的代码:

connect(m_button, SIGNAL(clicked()), this, SLOT(launchNewProjectWidget()));

所以我真的不明白它为什么不应该做同样的反应,我一遍又一遍地阅读Qt的例子......我一定错过了什么,但如果有人作为一个想法,我会超过感激,因为它开始让我讨厌生活:p

谢谢大家。

PS:好的,不确定我能处理好代码块的商务,在我的辩护中使用它真的很奇怪......:p

2 个答案:

答案 0 :(得分:5)

你在触发词中犯了错误:P应该是:

connect(m_quitAction, SIGNAL(triggered()), this, SLOT(quit()));
                                ------

触发,而非触发! :)

答案 1 :(得分:0)

如果我说得对,你的问题是m_openProjAction->激活(QAction :: Hover);这导致QAction发出hovered()而不是triggered();