LINUX.ORG.RU

QToolButton не получает шорткат от QAction

 , , ,


0

1

Qt 5.10.1

Пробую такой код:

  QAction* a=new QAction(QIcon(":/resource/editBold.svg"));
  a->setShortcut(QKeySequence("Ctrl+B"));

  QToolButton bold;
  bold.setDefaultAction( a );
В результате кнопка по шорткату Ctrl+B не срабатывает.

Добавляю команду, которая назначит шорткат самой кнопке:
bold.setShortcut(QKeySequence("Ctrl+B"));

В результате по шорткату кнопка выделяется, но не нажимается. А в логе появляется предупреждение:
[WRN] QAction::eventFilter: Ambiguous shortcut overload: Ctrl+B

То есть, шорткат от QAction вроде как есть, коль с ним «конфликтует» шорткат, заданный напрямую кнопке. Но почему-то если кнопка имеет только шорткат от QAction, то он не работает.

Почему так? Что я неправильно делаю?

★★★★★

Что я неправильно делаю?

Изобретаешь костыли вместо нормальных решений. Какого поведения ты хочешь добиться? С какой целью используешь именно QToolButton?

XMs ★★★★★
()
Ответ на: комментарий от XMs

У меня реконфигурируемый QToolBar. В него напихиваются заранее подготовленные QToolButton. Которые в свою очередь инициализируются заранее подготовленными QAction. Все логично и четко.

Проблема в том, что шорткат от QAction за каким-то хреном не применяется к QToolButton.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

В него напихиваются заранее подготовленные QToolButton

Но зачем? Чем тебя не устраивает добавление QAction вместо готовых тулбаров?

XMs ★★★★★
()
Ответ на: комментарий от XMs

Тем что мне нужно управлять внешним видом кнопок и их расположением. QAction за это не отвечает.

То есть, кнопка может быть выделяющейся, залипающейся, и все это обрабатывается на уровне кнопки, а не QAction.

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от Xintrea

выделяющейся

В смысле?


залипающейся

QAction::setCheckable(bool);


и их расположением. QAction за это не отвечает

За расположение отвечает тулбар. В каком порядке ты их добавляешь — в таком они и выводятся

XMs ★★★★★
()
Ответ на: комментарий от XMs

Помимо кнопок есть выпадающие списки. Списки вставлять списками, а кнопки действиями? Логики нет.

Кроме того, мне нужны границы кнопок:

button->setAutoRaise(false); // Установка видимых границ кнопки

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от fluorite

Я не пойму, на какой вопрос ты отвечаешь. Я спрашивал, почему шорткат, назначенный действию, не работает.

Xintrea ★★★★★
() автор топика

На скольку я помню чтобы отработал шорткат необходимо чтобы элемент был активным. Сделай addAction главному виджету (что там у тебя QWidget/QDialog/QMainWindow/etc)

B00
()
Ответ на: комментарий от fluorite

Ну в общем поигрался я и вот что получается.

Если создать QAction, задать ему шорткат, и засунуть этот QAction в QToolButton, то этот шорткат к самому QToolButton не применится. По шорткату будет генерироваться сигнал QAction::triggered, но кнопка нажиматься не будет, так как сигнала QToolButton::clicked генерироваться не будет.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

И еще, что интересно, Когда нажимается QToolButton, тогда вызывается слот QAction::trigger(). То есть, вставленное в кнопку действие срабатывает при клике на кнопку.

А вот когда по шорткату вызывается эта же QAction, то слот QToolButton::click() не вызывается.

А если вручную связать вызов QAction и клик по кнопке:

connect(&bold.defaultAction(), &QAction::triggered,
        &bold, &QToolButton::click);

... то получим рекурсию вызовов.

Это больше похоже на какую-то недоработку, чем на нормальное поведение.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от XMs

Кроч, переделал я все на QAction, пока не наткнулся на QPushButton. Ему, оказывается, QAction нельзя назначить. И поэтому для QPushButton приходится связывать сигнал действия с нажатием на кнопку. Как-то все вообще непоследовательно получается.

Xintrea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.