Qt: неоднозначная проблема с ярлыком

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

вот изображение этих виджетов внутри моего диалога:

Два настраиваемых редактирования текста внутри диалогового окна

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

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

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

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


person Mostafa    schedule 28.08.2013    source источник
comment
это только для Ctrl + B? Вы пробовали курсивом (ctrl + i)?   -  person dare    schedule 28.08.2013
comment
все ярлыки не работают. даже ctrl + I (что-то странное в ctrl + I в том, что один отступ текста, я думаю, это другая проблема!)   -  person Mostafa    schedule 28.08.2013
comment
кажется, вы определяете одни и те же ярлыки дважды или более в своих проектах, в разных частях   -  person dare    schedule 28.08.2013
comment
Решено! вы можете найти мою реализацию по этому адресу: github.com/m-o-s-t-a-f-a/dana   -  person Mostafa    schedule 28.05.2015


Ответы (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);    
}
person Mostafa    schedule 01.09.2013
comment
Важной частью здесь является вызов QWidget :: AddAction и QAction :: setShortcutContext (Qt :: WidgetWithChildrenShortcut); - person veio; 19.06.2016

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

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

person Kuba hasn't forgotten Monica    schedule 28.08.2013
comment
Итак, какое у вас решение? забудьте мою реализацию и мой дизайн. Есть диалог с двумя редакторами rich-text (это может быть что угодно), и у каждого редактора есть собственные действия, вы хотите определить ярлыки для них без конфликтов ... - person Mostafa; 29.08.2013

вам нужно установить фильтр событий, есть хороший пример в документации.

person dare    schedule 28.08.2013
comment
Спасибо за ответ, смею. Я сделал это, но это немного запутанный код. Я ищу кое-что еще. - person Mostafa; 29.08.2013