1

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

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

对话框内的两个自定义文本编辑

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

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

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

有人有其他想法吗?

4

3 回答 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);    
}
于 2013-09-01T15:51:06.687 回答
1

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

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

于 2013-08-28T20:14:49.060 回答
0

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

于 2013-08-28T17:43:48.100 回答