无关信息: 我正在尝试使用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_W来 Qt::Key_L.的关键,组合体被接收的事件被抛出.有了W,它就永远不会发生.我也尝试过移动event到QMainWindow以及子窗口中的eventFilter到QMdiArea.似乎做一些简单的事情就像从QMdiArea中删除默认的键处理程序一样简单.
据我所知,除了编写自己的 MDIArea 之外,我所寻找的东西是不可能的。
该快捷方式是在构建 QMdiSubWindow 期间在 QMdiSubWindowPrivate::createSystemMenu() 中设置的,我怀疑您是否可以在不修补 Qt 库的情况下删除它。
希望在某个时候有人会反驳这一点,或者 QT 会做出改变。与此同时,看起来我们都需要远离这些预先分配的快捷方式。