QPushButton constituye uno de los widgets más utilizados dentro del framework Qt para construir interfaces gráficas de usuario. Este componente permite generar botones interactivos que muestran texto, íconos o ambos elementos simultáneamente. Adicionalmente, es posible vincular combinaciones de teclas para activar el botón mediante el teclado.
Instanciación del botón
Existen dos formas principales de incorporar un QPushButton a nuestra aplicación: mediante el editor visual Qt Designer arrastrando el componente, o bien programáticmaente desde código C++.
A continuación se muestra cómo crear una instancia por código:
QPushButton *btnAction = new QPushButton("Guardar", parentWidget);
Para asignar un atajo de teclado, se emplea el carácter ampersand antes de la letra deseada:
QPushButton *btnAction = new QPushButton("&Guardar", parentWidget);
La regla indica que la letra precedida por "&" se convierte en el atajo, combinándose con la tecla Alt. En el ejemplo anterior, el atajo sería Alt + G. Si escribiéramos:
QPushButton *btnAction = new QPushButton("G&uardar", parentWidget);
El atajo resultante sería Alt + u.
Configuración de propiedades
Podemos modificar dinámicamente el contenido del botón empleando los métodos correspondientes.
Para alterar el texto visible:
btnAction->setText("Eliminar registro");
Para asignar una imagen al botón:
QIcon imgIcon("/ruta/hacia/imagen.png");
btnAction->setIcon(imgIcon);
Comportamiento de repetición automática
autoRepeat: Al habilitar esta propiedad, mantener presionado el botón hará que se emitan continuamente las señales pressed, released y clicked mientras el usuario no suelte el ratón.
miBoton->setAutoRepeat(true);
connect(miBoton, &QPushButton::pressed, []() {
qDebug() << "Botón presionado";
});
connect(miBoton, &QPushButton::clicked, []() {
qDebug() << "Botón clickeado";
});
connect(miBoton, &QPushButton::released, []() {
qDebug() << "Botón liberado";
});
autoRepeatDelay: Define el tiempo de espera antes de que comience la repetición automática tras la pulsación inicial.
miBoton->setAutoRepeatDelay(1500);
autoRepeatInterval: Establece el intervalo de tiempo entre cada emisión consecutiva de señales durante la repetición.
miBoton->setAutoRepeatInterval(500);
Conexión de señales
La señal principal es clicked, emitida cuando el usuario hace clic sobre el botón. Para conectarla a una función de respuesta:
connect(btnAction, &QPushButton::clicked, this, &MiVentana::ejecutarAccion);
Personalización con hojas de estilo (QSS)
Es posible aplicar estilos visuales al botón mediante sintaxis similar a CSS:
QPushButton {
background-color: rgb(70, 130, 180);
font: 12px "Segoe UI";
color: #ffffff;
border-radius: 4px;
padding: 8px 16px;
}
También es factible definir estilos condicionales según el estado del widget:
QPushButton:pressed {
background-color: rgb(50, 100, 150);
}
QPushButton:hover {
background-color: rgb(90, 150, 200);
}
Ejemplo integrado
QPushButton *btnExportar = new QPushButton("&Exportar", this);
QIcon iconoExp("/recursos/exportar.svg");
btnExportar->setIcon(iconoExp);
connect(btnExportar, &QPushButton::clicked, []() {
QMessageBox::information(nullptr, "Info", "Operación completada");
});
btnExportar->setStyleSheet(
"QPushButton {"
" background-color: rgb(46, 139, 87);"
" font: 13px 'Arial';"
" color: white;"
" border: none;"
" padding: 6px 12px;"
"}"
"QPushButton:hover {"
" background-color: rgb(60, 179, 113);"
"}"
);