QListWidget control Qt

Un QListWidget nos permite mostrar una lista de elementos, el usuario puede seleccionar uno o varios de ellos, cada elemento estará representado por un objeto QListWidgetItem, podremos añadir o remover elementos según sea necesario, los elementos seleccionados por el usuarios pueden ser varios o solo uno, dependiendo del modo de selección que configuremos.

Podemos añadir elementos a este control de dos maneras, una usando el constructor de la clase QListWidgetItem y otra usando el método addItem(...) de la clase QListWidget.

QListWidget *listWidget = new QListWidget(this);

new QListWidgetItem(tr("Manzanas"), listWidget);
new QListWidgetItem(tr("Uvas"), listWidget);
new QListWidgetItem(tr("Fresas"), listWidget);

Usando el método insertItem() indicamos la fila y el elemento que deseamos insertar, si deseas insertar varios elementos al mismo tiempo puedes usar insertItems()

QListWidgetItem *newItem = new QListWidgetItem;
newItem->setText("Manzanas");

QListWidget *listWidget = new QListWidget(this);
listWidget->insertItem(row, newItem);

Otras funciones interesantes son count() que nos indica la cantidad de elementos presentes y takeItem() que nos permite remover el elemento indicado, además currentItem() nos devuelve el elemente que ha seleccionado el usuario.

Ejemplo de QListWidget

QListWidget *lw = new QListWidget;

for(int i = 0; i < 10; i++)
{
        QListWidgetItem *item = new QListWidgetItem;
        item->setText(QString("Item %1").arg(i));
        item->setTextColor(qRgb(125, 55, 21));
        item->setIcon(QIcon(":/qt.png"));

        lw->addItem(item);
}

Los correspondientes métodos set son usados para cambiar, el texto, el color de texto y el icono que muestra cada uno de los elementos en el control, nos necesario indicarlos todos, también existen otros que nos se muestran aquí.

QListWidget control Qt

Si deseamos estar pendientes de los cambios en la selección, debemos saber que cuando el usuario selecciona un elemento se emiten los siguientes signal, currentTextChanged, currentItemChanged y currentRowChanged, el primero contiene información del texto cuando la selección cambia, el segundo contiene los objetos QListWidgetItem actualmente seleccionado y el anterior, el último contiene el índice de la fila que ha sido seleccionada.

Por ejemplo, agregaremos una etiqueta en donde se mostrará el texto que este actualmente seleccionado.

#include <QApplication>
#include <QListWidget>
#include <QListWidgetItem>
#include <QVBoxLayout>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget w;

    QLabel *label = new QLabel;
    QListWidget *lw = new QListWidget;

    QObject::connect(lw, &QListWidget::currentTextChanged, label, &QLabel::setText);

    for(int i = 0; i < 10; i++)
    {
        QListWidgetItem *item = new QListWidgetItem;
        item->setText(QString("Item %1").arg(i));
        item->setTextColor(qRgb(125, 55, 21));
        item->setIcon(QIcon(":/qt.png"));

        lw->addItem(item);
    }

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(lw);
    layout->addWidget(label);

    w.setLayout(layout);
    w.setWindowTitle("QListWidget");
    w.show();

    return a.exec();
}

QListWidget con selección simple

Para activar la selección múltiple debemos cambiar el modo a QListWidget::MultiSelection, para obtener los elementos seleccionados usaremos selectedItems(), para este ejemplo nos conectaremos al signal itemSelectionChanged que se emite cada vez que cambia la selección.

QListWidget *lw = new QListWidget;                                            
lw->setSelectionMode(QListWidget::MultiSelection);                            
                                                                              
QObject::connect(lw, &QListWidget::itemSelectionChanged, [=]() {              
    label->clear();                                                           
    for(int i = 0; i < lw->selectedItems().length(); i++)                     
        label->setText(label->text() + ", " + lw->selectedItems()[i]->text());
});

QListWidget con selección múltiple

Es todo por hoy, nos vemos en la próxima.

Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

Conectar SQL Server con Java

Controles y Contenedores JavaFX 8 - I

Histogramas OpenCV Python