Russian Qt Forum
Ноябрь 22, 2024, 00:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Установка QButtonGroup для набора QRadioButton  (Прочитано 5199 раз)
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« : Ноябрь 21, 2021, 01:06 »

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

Мои проекты на Qt: DoubleContact, LInvert
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Ноябрь 21, 2021, 10:28 »

Есть QButtonGroup::button для получения кнопки по ID и QAbstractButton::setChecked для чека/снятия чека у кнопки
Для удобства можно реализовать свою функцию по выбору кнопки либо унаследоваться от QButtonGroup и оформить её в виде метода
В дизайнере вроде как да, отсутствует возможность задать QButtonGroup. Но можно объединять кнопки в QGroupBox, где для каждой группы будет свой механизм выбора текущей радиокнопки
Записан
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« Ответ #2 : Ноябрь 21, 2021, 10:53 »

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

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

Спасибо.
Записан

Мои проекты на Qt: DoubleContact, LInvert
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« Ответ #3 : Ноябрь 21, 2021, 11:31 »

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

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

Мои проекты на Qt: DoubleContact, LInvert
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Ноябрь 21, 2021, 11:33 »

Если кнопки находятся на панели QToolBar, то уместнее будет QButtonGroup
Записан
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« Ответ #5 : Ноябрь 21, 2021, 11:59 »

Ну я писал про QRadioButton, их я что-то не видел, чтобы на тулбарах размещали. (Да, если я этого не видел, этого не значит, что этого нет.)
Записан

Мои проекты на Qt: DoubleContact, LInvert
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Ноябрь 21, 2021, 13:17 »

1) В палитре компонентов Qt Creator 5.0.2 я этого класса не обнаружил. Да, программно понятно, как его добавить, как добавить в него кнопки. Но - только программно?
выбрать нужные компоненты на виджете — правая кнопка — assign button group
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« Ответ #7 : Ноябрь 21, 2021, 14:10 »

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

P.S. Но в принципе заработало, хоть и более громоздко, чем хотелось бы. Использовал в последнем коммите.
« Последнее редактирование: Ноябрь 21, 2021, 22:34 от DarkHobbit » Записан

Мои проекты на Qt: DoubleContact, LInvert
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 23.