Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: DarkHobbit от Ноябрь 21, 2021, 01:06



Название: Установка QButtonGroup для набора QRadioButton
Отправлено: DarkHobbit от Ноябрь 21, 2021, 01:06
Доброй ночи.
Задолбавшись перебирать во время всяких getData/setData вручную экземпляры QRadioButton, я решил поискать, нет ли для Qt кнопочных контейнеров, похожих на TRadioGroup из Delphi. К моему удивлению, обнаружился штатный класс QButtonGroup. Но я не совсем понял, как с ним работать:
1) В палитре компонентов Qt Creator 5.0.2 я этого класса не обнаружил. Да, программно понятно, как его добавить, как добавить в него кнопки. Но - только программно?
2) есть метод checkedId(), позволяющий получить номер выбранной кнопки. А где же обратная операция, какой-нибудь setCheckedId() или checkButtonById()?
Если первый пункт, в принципе, терпим, то второй повергает в уныние...


Название: Re: Установка QButtonGroup
Отправлено: __Heaven__ от Ноябрь 21, 2021, 10:28
Есть QButtonGroup::button для получения кнопки по ID и QAbstractButton::setChecked для чека/снятия чека у кнопки
Для удобства можно реализовать свою функцию по выбору кнопки либо унаследоваться от QButtonGroup и оформить её в виде метода
В дизайнере вроде как да, отсутствует возможность задать QButtonGroup. Но можно объединять кнопки в QGroupBox, где для каждой группы будет свой механизм выбора текущей радиокнопки


Название: Re: Установка QButtonGroup
Отправлено: DarkHobbit от Ноябрь 21, 2021, 10:53
Есть QButtonGroup::button для получения кнопки по ID и QAbstractButton::setChecked для чека/снятия чека у кнопки
Это я видел, да. Но тогда...
Цитировать
Для удобства можно реализовать свою функцию по выбору кнопки либо унаследоваться от QButtonGroup и оформить её в виде метода
...в итоге мы получаем, что QButtonGroup по количеству телодвижений ненамного лучше обычного QGroupBox. Для которого тоже можно написать пару функций-хелперов. И он вставляется дизайнером. И более того, у него ещё есть заголовок, которого у QButtonGroup, если не ошибаюсь, нет.

Ну да, в QButtonGroup ПОЛОВИНА работы сделана. Что мешало кутешникам сделать вторую половину? Странно это, обычно у них всё строго симметрично и доделано. Не похоже на них. Я думал, это я в глаза долблюсь, а оказывается, так было задумано...

Спасибо.


Название: Re: Установка QButtonGroup
Отправлено: DarkHobbit от Ноябрь 21, 2021, 11:31
В принципе button(id)->setChecked(true) можно вызвать одной строкой, только это небезопасная конструкция, где-то выше должна быть проверка, что 0<=id<Nbuttons. Иначе может придти живительный сегфолт.

В общем, жить можно, но слегка противно. В классе не хватает одного явно напрашивающегося метода из трёх строчек. Повторюсь, есть ощущение недоделанности, на кутешников это непохоже.


Название: Re: Установка QButtonGroup
Отправлено: __Heaven__ от Ноябрь 21, 2021, 11:33
Если кнопки находятся на панели QToolBar, то уместнее будет QButtonGroup


Название: Re: Установка QButtonGroup
Отправлено: DarkHobbit от Ноябрь 21, 2021, 11:59
Ну я писал про QRadioButton, их я что-то не видел, чтобы на тулбарах размещали. (Да, если я этого не видел, этого не значит, что этого нет.)


Название: Re: Установка QButtonGroup
Отправлено: kambala от Ноябрь 21, 2021, 13:17
1) В палитре компонентов Qt Creator 5.0.2 я этого класса не обнаружил. Да, программно понятно, как его добавить, как добавить в него кнопки. Но - только программно?
выбрать нужные компоненты на виджете — правая кнопка — assign button group


Название: Re: Установка QButtonGroup
Отправлено: DarkHobbit от Ноябрь 21, 2021, 14:10
выбрать нужные компоненты на виджете — правая кнопка — assign button group
"Назначить группу кнопок"? Ага, нашёл. Сам получившийся в итоге QButtonGroup, правда, в дереве виджетов долго искал, нашёл в самом низу. В общем, неинтуитивно.
А идентификаторы кнопок при этом дизайнером же можно как-то задать? У меня по умолчанию получились -2, -3, -4.
Понятно, что в программе их можно через setId скорректировать. Но тогда опять возникает вопрос, стоит ли овчинка выделки. Можно уж тогда и QButtonGroup в конструкторе после setupUi создать, и всё в него сразу с нужными id добавить. А то и опять-таки вернуться к варианту с QGroupBox...

P.S. Но в принципе заработало, хоть и более громоздко, чем хотелось бы. Использовал в последнем коммите (https://github.com/DarkHobbit/doublecontact/commit/ed7b44ec1b2ce8572c00461692c48792c8798217).