我已经实现了一个带有两个自定义文本编辑器的对话框(两个编辑器对象具有相同的类) 这个自定义小部件是来自QWidget的继承类,它里面有两个小部件,一个是actions-tool-bar,第二个是QTextEdit。我为这个自定义小部件设置了一些快捷方式,用于“Make text Bold”,“Make it Italic”等操作。
这是我对话框中这些小部件的图片:
到目前为止,每件事都没问题。 但是,当我按Ctrl + B为例时,我收到此错误消息:
QAction::eventFilter: Ambiguous shortcut overload: Ctrl+B
将快捷方式上下文设置为WidgetWithChildrenShortcut将无法帮助我消除快捷方式的歧义。
任何人都有其他想法?
答案 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,文档中有一个很好的例子。