无关信息: 我正在尝试使用Qt构建应用程序。此应用程序具有QMdiArea和一个子窗口。我的孩子窗口将有一个菜单,可以将其整合到QMdiArea中,也可以将其分隔并粘贴到孩子身上。虽然,这比需要更多的细节......Qt - 删除快捷方式 - 模糊的快捷方式超载
问题: 我想我的孩子 - 小部件有一个快捷键,菜单“CTRL + W”。但是,因为我用的是QMdiArea,快捷键已被使用,可造成:
的QAction :: eventFilter:暧昧快捷超载:按Ctrl + W
我怎样才能摆脱这种快捷和索赔它在我的孩子小部件呢?
更新: 这是我一直没有运气尝试:
class MDI : public QMdiArea
{
Q_OBJECT
private:
bool event(QEvent *tEvent)
{
if (tEvent->type() == QEvent::KeyPress)
{
QKeyEvent* ke = static_cast<QKeyEvent*>(tEvent);
if (ke->key()== Qt::Key_W && ke->modifiers() & Qt::ControlModifier)
emit KeyCW();
return true;
}
return QMdiArea::event(tEvent);
}
public:
signals:
void KeyCW();
};
这工作,如果我做的改变Qt::Key_W
一样简单Qt::Key_L.
一些关键-COMBO接收和事件抛出。用W,它永远不会发生。我也尝试将event
移动到QMainWindow以及子窗口中的eventFilter到QMdiArea。从QMdiArea中删除默认的关键处理程序这样简单的操作似乎有些过于复杂。
那么,有没有办法禁用快捷方式创建QMdiArea?基本上,如果我想使用快捷键,我必须在两者之间使用信号/插槽连接。 – Serodis 2011-12-22 13:30:37
另外,如果这绝对是唯一的方法,那么离开模棱两可的捷径会有什么伤害吗? IE:在窗口小部件菜单上安装快捷方式?我真的不想牺牲菜单栏中的“Ctrl + W”快捷方式提醒,因为这是告诉用户快捷方式功能的最佳方式。 – Serodis 2011-12-22 13:46:02
要改变'QMdiArea'关于特定关键事件的默认行为,就是对它进行子类化并重新实现'keyPressEvent()'。另一种方法是使用事件过滤器。 – Arlen 2011-12-22 21:57:51