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

时间:2013-08-28 16:15:38

标签: qt shortcuts qtextedit ambiguous

我已经实现了一个带有两个自定义文本编辑器的对话框(两个编辑器对象具有相同的类) 这个自定义小部件是来自QWidget的继承类,它里面有两个小部件,一个是actions-tool-bar,第二个是QTextEdit。我为这个自定义小部件设置了一些快捷方式,用于“Make text Bold”,“Make it Italic”等操作。

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

Two custom Text-Edit inside a dialog

到目前为止,每件事都没问题。 但是,当我按Ctrl + B为例时,我收到此错误消息:

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

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

任何人都有其他想法?

3 个答案:

答案 0 :(得分:2)

最后,我找到了解决方案。我的编辑器继承自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 :(得分:1)

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

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

答案 2 :(得分:0)

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