Uso del componente QPushButton en Qt para interfaces gráficas

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);"
    "}"
);

Etiquetas: QPushButton Qt QWidget QSS Señales

Publicado el 6-28 19:13