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

问题描述 投票:0回答:3

我已经实现了一个对话框,里面有两个自定义的文本编辑器(两个具有相同类的编辑器对象) 这个自定义小部件是从

QWidget
继承的类,它内部有两个小部件,一个是操作工具栏,第二个是
QTextEdit
。我为这个自定义小部件设置了一些快捷方式,以执行某些操作,例如“将文本设为粗体”、“将文本设为斜体”等。

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

![对话框内的两个自定义文本编辑][1] [1]:https://i.sstatic.net/en3mw.png

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

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

将快捷方式上下文设置为

WidgetWithChildrenShortcut
不会帮助我消除快捷方式的歧义。

大家还有其他想法吗?

qt shortcut qtextedit ambiguous
3个回答
3
投票

终于,我找到了解决办法。我的编辑器继承自 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);    
}

1
投票

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

您的编辑器小部件很可能通过定义自己的操作而表现得不恰当。他们不应该这样做。


0
投票

您需要安装事件过滤器,文档中有一个很好的示例。

© www.soinside.com 2019 - 2024. All rights reserved.