Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Larry от Март 01, 2016, 10:53



Название: [РЕШЕНО]QActionGroup
Отправлено: Larry от Март 01, 2016, 10:53
Добрый день, форумчане.
Есть такая панель, как на рисунке. В первом случае (shapes) используется QListWidget, а во втором (tools) две кнопки QToolButton. Выбираться должен только один из них. Получится ли объединить итемы QListWidget и кнопки через QActionGroup? Или как лучше такое реализовать? Спасибо.


Название: Re: QActionGroup
Отправлено: Bepec от Март 01, 2016, 10:59
Вариант при выборе любого элемента на панели вызывать очищающую прежний выбор функцию не вариант?

На мой взгляд даже если вы их объедините через actionGroup, listWidget никак не отреагирует на это. ToolButton ещё туда-сюда, а вот listWidget никоим образом с QAction не связан.

На мой взгляд лучше всего будет иметь у каждой панели ф-цию очистки выбора аля "clearChange", которая позволит добавлять любые виджеты без изменения архитектуры.


Название: Re: QActionGroup
Отправлено: Racheengel от Март 01, 2016, 11:36
Можно сделать псевдоэкшены и повесить их на элементы QListWidget, тогда они будут реагировать на изменение группы и стирать выделение.


Название: Re: QActionGroup
Отправлено: Larry от Март 01, 2016, 11:38
А что за псевдоэкшены? Посмотрел вроде QListWidgetItem нет метода addAction...


Название: Re: QActionGroup
Отправлено: Racheengel от Март 01, 2016, 11:43
А что за псевдоэкшены? Посмотрел вроде QListWidgetItem нет метода addAction...

Правильно, такого нету. Но вы можете использовать setData с указанием id экшена, который создадите в вашем контроллере меню. А этот экшин уже посадите в группу. Когда соответствующий элемент листа будет выделен - активируйте связанный с ним экшин, тогда ваша группа отреагирует на изменение. И наоборот, если группа поменялась "от кнопки" - вы это увидите по id экшена. Если это экшин листа - очистите выделение.

Либо же создайте свой List Item как наследник от QListWidgetItem и QAction.


Название: Re: QActionGroup
Отправлено: Larry от Март 01, 2016, 11:50
Спасибо большое, значит так и сделаю.