Название: Установка 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). |