Qt:不明确的快捷方式问题

Qt:不明确的快捷方式问题,qt,shortcuts,qtextedit,ambiguous,Qt,Shortcuts,Qtextedit,Ambiguous,我实现了一个对话框,里面有两个自定义的文本编辑器(两个编辑器对象具有相同的类) 这个自定义小部件是从QWidget继承的类,它内部有两个小部件,一个是操作工具栏,另一个是QTextEdit。我为这个自定义小部件设置了一些快捷方式,例如“使文本加粗”、“使文本斜体”等等 下面是我的对话框中这些小部件的图片: 到目前为止一切正常。 但是,例如,当我按下Ctrl+B时,我收到了以下错误消息: QAction::eventFilter: Ambiguous shortcut overload: Ct

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

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


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

QAction::eventFilter: Ambiguous shortcut overload: Ctrl+B
将快捷方式上下文设置为WidgetWithChildrenShortcut不会帮助我消除快捷方式的歧义


有人有其他想法吗

您需要,文档中有一个很好的例子

您需要,文档中有一个很好的例子

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


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

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


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

最后,我找到了解决办法。我的编辑器是从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);    
}

最后,我找到了解决办法。我的编辑器是从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);    
}

是否只针对Ctrl+B?你试过斜体(ctrl+i)吗?所有的快捷键都不起作用。甚至ctrl+I(ctrl+I中奇怪的一点是,一个缩进文本,我认为这是另一个问题!)看起来您在项目中,在不同的部分定义了两次或更多次相同的快捷键!您可以在这个地址找到我的实现:它只用于Ctrl+B吗?你试过斜体(ctrl+i)吗?所有的快捷键都不起作用。甚至ctrl+I(ctrl+I中奇怪的一点是,一个缩进文本,我认为这是另一个问题!)看起来您在项目中,在不同的部分定义了两次或更多次相同的快捷键!您可以在这个地址找到我的实现:那么您的解决方案是什么?忘记我的实现和设计吧。有一个对话框,有两个富文本编辑器(可以是任何其他编辑器),每个编辑器都有自己的操作,您希望为它们定义快捷方式而不产生冲突…那么您的解决方案是什么?忘记我的实现和设计吧。这里有一个对话框,有两个富文本编辑器(可以是任何其他编辑器),每个编辑器都有自己的操作,您希望为它们定义快捷方式而不发生冲突…感谢您的回复,dare。我做了,但代码有点乱。我在找别的东西。谢谢你的回复。我做了,但代码有点乱。我在寻找其他的东西。这里重要的部分是调用QWidget::AddAction和QAction::setShortcutContext(Qt::WidgetWithChildrenShortcut);这里的重要部分是调用QWidget::AddAction和QAction::setShortcutContext(Qt::WidgetWithChildrenShortcut);