2013-08-28 5 views
0

Я реализовал диалог с двумя настраиваемыми текстовыми редакторами внутри (два объекта редактора с одним классом) Этот пользовательский виджет является наследуемым классом из QWidget и имеет два виджета внутри, один из них - действия -tool-bar, а второй - QTextEdit. Я установил некоторые ярлыки для этого пользовательского виджета для некоторых действий, таких как «Сделать текст полужирным», «Сделать текст курсивом» и так далее.Qt: Неоднозначная проблема с ярлыком

здесь картина этих виджетов внутри диалога мой:

Two custom Text-Edit inside a dialog

До сих пор каждая вещь в порядке. Но, когда я нажимаю Ctrl + B, например, я получил сообщение об ошибке:

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

установки контекста ярлыка к WidgetWithChildrenShortcut не поможет мне неоднозначность ярлыки.

У кого-нибудь есть другая идея?

+0

Это просто для Ctrl + B? Вы пробовали его на курсивом (ctrl + i)? – dare

+0

все ярлыки не работают. даже ctrl + I (что-то странное в ctrl + I - это то, что один отступ в тексте, я думаю, что это еще одна проблема!) – Mostafa

+0

кажется, что вы определяете те же самые ярлыки дважды или более в своих проектах, в разных частях – dare

ответ

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

Важной частью здесь является вызов QWidget :: AddAction и QAction :: setShortcutContext (Qt :: WidgetWithChildrenShortcut); – veio

0

вам нужно install an event filter, есть хороший пример в документации.

+0

Спасибо за ваш ответ, смел. Я сделал это, но это немного грязный код. Я ищу что-то еще. – Mostafa

1

У вас могут быть две панели инструментов, но они должны использовать действие, действующее на текущий сфокусированный редактор, и вы хотите, чтобы существовал только один QAction, а не несколько из них. Несмотря на то, что у одного QAction есть несколько кнопок, связанных с ним.

Скорее всего, ваши виджеты вашего редактора ведут себя ненадлежащим образом, определяя свои собственные действия. Они не должны этого делать.

+0

Так каково ваше решение? забудьте о моей реализации и моем дизайне. Существует диалог с двумя богатыми текстовыми редакторами (это может быть что-то еще), и каждый редактор имеет собственные действия, вы хотите определить ярлыки для них без конфликтов ... – Mostafa

Смежные вопросы