Qt - 删除快捷方式 - 不明确的快捷方式重载

Ser*_*dis 5 c++ qt qmdiarea

无关信息: 我正在尝试使用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();
};
Run Code Online (Sandbox Code Playgroud)

这工作,如果我做的改变简单的东西Qt::Key_WQt::Key_L.的关键,组合体被接收的事件被抛出.有了W,它就永远不会发生.我也尝试过移动event到QMainWindow以及子窗口中的eventFilter到QMdiArea.似乎做一些简单的事情就像从QMdiArea中删除默认的键处理程序一样简单.

Ser*_*dis 0

据我所知,除了编写自己的 MDIArea 之外,我所寻找的东西是不可能的。

该快捷方式是在构建 QMdiSubWindow 期间在 QMdiSubWindowPrivate::createSystemMenu() 中设置的,我怀疑您是否可以在不修补 Qt 库的情况下删除它。

希望在某个时候有人会反驳这一点,或者 QT 会做出改变。与此同时,看起来我们都需要远离这些预先分配的快捷方式。