gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:22 25 4
gpt4 key购买 nike

无关信息:我正在尝试使用 Qt 构建应用程序。此应用程序具有一个 QMdiArea 和一个子窗口。我的子窗口将有一个菜单,该菜单可以集成到 QMdiArea 中或分离并附加到子窗口本身。虽然,这比需要的要详细一些......

问题:我希望我的子控件有一个带有快捷方式“CTRL+W”的菜单。但是,因为我使用的是 QMdiArea,快捷方式已经被使用导致:

QAction::eventFilter: Ambiguous shortcut overload: 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 中删除默认 key 处理程序这样简单的事情似乎有点过于复杂。

最佳答案

您可以像这样禁用此快捷方式:

for( QAction *action : subWindow->systemMenu()->actions() ) {
if( action->shortcut() == QKeySequence( QKeySequence::Close ) ) {
action->setShortcut( QKeySequence() );
break;
}
}

关于c++ - Qt - 删除快捷方式 - 不明确的快捷方式重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8599009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com