无关信息: 我正在尝试使用 Qt 构建应用程序。此应用程序具有 QMdiArea 和子窗口。我的子窗口将有一个菜单,它可以集成到 QMdiArea 中,也可以隔离并附加到孩子本身。不过,这比需要的要详细一些...
问题: 我希望我的子小部件有一个带有快捷键“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.
键组合并引发事件,这将起作用。有了W,它就永远不会发生。我还尝试将event
QMainWindow 以及子窗口中的 eventFilter 移至 QMdiArea。做一些简单的事情,比如从 QMdiArea 中删除默认的密钥处理程序,似乎有点过于复杂。