【问题标题】:how to print shortcut text on menu bar without setting shortcut?如何在不设置快捷方式的情况下在菜单栏上打印快捷方式文本?
【发布时间】:2020-04-21 14:04:23
【问题描述】:

这样,我想打印快捷方式文本。

但我不想使用这样的代码:

this->newAction->setShortcut(QKeySequence::New);

因为我使用 KeyAction 类来处理快捷方式。

如果我使用setShortcut(),我的 KeyAction 类将被忽略。

有没有只打印快捷方式文本的解决方案?

或者我是否必须设置像 "새 파일(&N)\t\tCtrl + N" 这样的文本?

我想打印对齐的文本。

感谢您的帮助。

【问题讨论】:

  • 我在这个问题上花了相当多的时间,最终发现直接不可能。补救措施是使用QWidgetAction。您可以随意格式化它们。然而,这并不容易和brings new problems。祝你好运,我期待着有用的答案。
  • 您可能希望将setShortcut() 与覆盖关联的快捷方式事件结合使用。见QEvent::ShortcutOverride
  • @Tfry 如果我理解你的话,我可以尝试忽略传递 QShortcutEvent 的事件。我对吗?谢谢。
  • @chan:没错。我自己已经有一段时间没有这样做了,但是 IIRC,基本过程是:1. 安装事件过滤器,2. 接受快捷方式覆盖事件 3. 现在 Qt 将提供一个常规键事件。

标签: c++ qt menu shortcut


【解决方案1】:

根据TFry的cmets回答。

像往常一样设置快捷方式(使用QAction::setShortcut)。 为了防止触发动作并在按下快捷键时停止事件传播,您必须接受顶层窗口中的所有ShortcutOverride-事件(通常是MainWindow):

MainWindow::MainWindow(...)
{
   installEventFilter(this);
}

bool MainWindow::eventFilter(QObject* o, QEvent* e)
{
  if (o == this && e->type() == QEvent::ShortcutOverride) {
    e->accept();
  }
  return QMainWindow::eventFilter(o, e);
}

【讨论】:

  • 谢谢。不久之后我会尝试这个解决方案。因为我以其他方式解决了我的问题。我用我的解决方案为您编辑了这个问题帖子,但似乎没有保存:(解决方案只是使用此代码:this->newAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N));
  • 我已从您的问题中删除了该部分(您可以在编辑历史记录中看到它),因为(a)它没有回答您的问题(尽管它可能适用于您的特殊情况)和( b)答案应该进入答案部分,而不是问题。我认为 TFry 的解决方案总体上是您问题的正确答案(即,它帮助了我很多,也可能帮助了许多其他人)。
  • 我明白了。我要试试这个解决方案。感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 2011-04-01
相关资源
最近更新 更多