我正在尝试用Qt制作一个IHM,我从制作一个基本菜单(File,Edit...)开始。到目前为止,我的菜单包含"文件",然后显示"新建项目,打开项目,退出"。看起来很棒,但我的问题是我似乎无法触发这些操作(单击它们或通过快捷键)。
这是我的插槽:
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
你在触发单词:P中犯了一个错误,它应该是:
connect(m_quitAction, SIGNAL(triggered()), this, SLOT(quit()));
------
触发,而不是三重奏! :)
如果我做对了,你的问题是m_openProjAction->激活( QAction::Hover); 这导致 QAction 发出 hovered() 而不是 triggered();