我已经实现了一个对话框,里面有两个自定义的文本编辑器(两个具有相同类的编辑器对象) 这个自定义小部件是从
QWidget
继承的类,它内部有两个小部件,一个是操作工具栏,第二个是 QTextEdit
。我为这个自定义小部件设置了一些快捷方式,以执行某些操作,例如“将文本设为粗体”、“将文本设为斜体”等。
这是我的对话框中这些小部件的图片:
![对话框内的两个自定义文本编辑][1]
[1]:https://i.sstatic.net/en3mw.png
到目前为止一切都还好。 但是,例如,当我按 Ctrl+B 时,我收到此错误消息:
QAction::eventFilter: Ambiguous shortcut overload: Ctrl+B
将快捷方式上下文设置为
WidgetWithChildrenShortcut
不会帮助我消除快捷方式的歧义。
大家还有其他想法吗?
终于,我找到了解决办法。我的编辑器继承自 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);
}
您可以有两个工具栏,但它们应该使用作用于当前焦点编辑器的操作,并且您只希望存在一个 QAction,而不是多个。尽管只有一个 QAction,但您可以链接多个按钮。
您的编辑器小部件很可能通过定义自己的操作而表现得不恰当。他们不应该这样做。
您需要安装事件过滤器,文档中有一个很好的示例。