【问题标题】:Qt: Ambiguous shortcut issueQt:不明确的快捷方式问题
【发布时间】:2013-08-28 16:15:38
【问题描述】:

我已经实现了一个带有两个自定义文本编辑器的对话框(两个具有相同类的编辑器对象) 这个自定义小部件是从 QWidget 继承的类,它内部有两个小部件,一个是操作工具栏,第二个是 QTextEdit。我为此自定义小部件设置了一些快捷方式,用于一些操作,例如“使文本加粗”、“使文本斜体”等。

这是我的对话框中这些小部件的图片:


到目前为止,一切都很好。 但是,例如,当我按 Ctrl+B 时,我收到以下错误消息:

QAction::eventFilter: Ambiguous shortcut overload: Ctrl+B

将快捷方式上下文设置为 WidgetWithChildrenShortcut 不会帮助我消除快捷方式的歧义。

有人有其他想法吗?

【问题讨论】:

  • 只是Ctrl+B吗?你试过斜体(ctrl + i)吗?
  • 所有快捷方式都不起作用。甚至 ctrl+I(在 ctrl+I 中奇怪的是一个缩进文本,我认为这是另一个问题!)
  • 您似乎在项目的不同部分定义了两次或多次相同的快捷方式
  • 解决了!你可以在这个地址找到我的实现:github.com/m-o-s-t-a-f-a/dana

标签: qt shortcuts qtextedit ambiguous


【解决方案1】:

最后,我找到了解决方案。我的编辑器继承自 qtextedit。我将这行添加到每个操作中,它现在可以工作了!

void MyEditor::addActionToToolbar(QAction *a)
{
    a->setShortcutContext(Qt::WidgetWithChildrenShortcut);
    addAction(a);

    QToolButton* btn = new QToolButton(this);
    btn->setDefaultAction( a );
    btn->setFocusPolicy(Qt::NoFocus);
    btn->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
    btn->setIconSize(QSize(16,16));

    toolBar->addWidget(btn);    
}

【讨论】:

  • 这里重要的部分是调用 QWidget::AddAction 和 QAction::setShortcutContext(Qt::WidgetWithChildrenShortcut);
【解决方案2】:

您可以有两个工具栏,但它们应该使用作用于当前焦点编辑器的操作,并且您希望只存在一个 QAction,而不是多个。尽管有一个 QAction,但您可以将多个按钮链接到它。

您的编辑器小部件很可能通过定义它们自己的操作而出现不当行为。他们不应该那样做。

【讨论】:

  • 那么您的解决方案是什么?忘记我的实现和我的设计。有一个带有两个富文本编辑器的对话框(可以是其他任何东西),每个编辑器都有自己的操作,您希望为它们定义快捷方式而不会发生冲突...
【解决方案3】:

你需要install an event filter,文档中有一个很好的例子。

【讨论】:

  • 谢谢你的回复,敢。我做到了,但代码有点乱。我正在寻找别的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
相关资源
最近更新 更多