O QButtonGroup
é uma classe do framework Qt usada para gerenciar um grupo de botões, permitindo que você trate vários botões como uma única entidade lógica.
Ele não é um widget em si, mas uma maneira de agrupar botões como QPushButton
, QRadioButton
, QCheckBox
e similares.
Isso é especialmente útil quando você deseja que apenas um botão do grupo possa ser selecionado de cada vez (como em um grupo de botões de rádio), ou quando você precisa gerenciar o comportamento e a interação de múltiplos botões juntos.
Principais funcionalidades da classe QButtonGroup
:
- Agrupamento de Botões: Você pode adicionar vários botões ao grupo usando o método
addButton()
. Cada botão pode ser associado a um ID exclusivo, o que facilita identificar qual botão foi pressionado. - Exclusividade: Ao configurar o grupo como exclusivo (
setExclusive(true)
), apenas um botão dentro do grupo pode estar selecionado por vez. Isso é útil, por exemplo, ao trabalhar com botões de rádio (QRadioButton
), onde apenas uma opção pode ser selecionada. - Sinais e Slots: O
QButtonGroup
emite sinais comobuttonClicked(int id)
ebuttonPressed(int id)
, que permitem conectar slots que reagem quando um botão específico do grupo é pressionado ou clicado.
Exemplo básico de uso em C++:
# -*- coding: utf-8 -*-
"""."""
import sys
from PySide6 import QtCore, QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None, **kwargs):
super().__init__(parent=parent)
self.application = kwargs.get('application')
window_size = QtCore.QSize(960, 540)
self.resize(window_size)
self.setMinimumSize(window_size)
self.setWindowTitle(self.tr('Python - PySide6 - Qt'))
vbox = QtWidgets.QVBoxLayout()
central_widget = QtWidgets.QWidget()
central_widget.setLayout(vbox)
self.setCentralWidget(central_widget)
button_group = QtWidgets.QButtonGroup(self)
button_group.checkedId
button_group.buttonClicked.connect(self.on_button_clicked)
for i in range(1, 5):
radio_button = QtWidgets.QRadioButton()
radio_button.setText(f'Item {i}.')
if i == 1:
radio_button.setChecked(True)
vbox.addWidget(radio_button)
button_group.addButton(radio_button)
def on_button_clicked(self, button):
print(button.text())
def main() -> None:
APPLICATION_NAME = 'br.com.justcode.Qt'
ORGANIZATION_NAME = APPLICATION_NAME.split('.')[2]
ORGANIZATION_DOMAIN = '.'.join(APPLICATION_NAME.split('.')[0:3])
application = QtWidgets.QApplication(sys.argv)
application.setApplicationDisplayName(APPLICATION_NAME)
application.setApplicationName(APPLICATION_NAME)
application.setDesktopFileName(APPLICATION_NAME)
application.setOrganizationName(ORGANIZATION_NAME)
application.setOrganizationDomain(ORGANIZATION_DOMAIN)
if QtCore.QSysInfo.productType() == 'windows':
from ctypes import windll
windll.shell32.SetCurrentProcessExplicitAppUserModelID(
APPLICATION_NAME,
)
window = MainWindow(application=application)
window.show()
sys.exit(application.exec())
if __name__ == '__main__':
main()
Neste exemplo, botões de rádio são adicionados a um QButtonGroup
.
Quando qualquer um desses botões é clicado, o texto do botão é impresso no console.
O QButtonGroup
facilita o gerenciamento de grupos de botões e o tratamento de seus eventos de forma centralizada.