QComboBox y QSlider

El widget QComboBox combina un botón y una ventana emergente en donde se muestran una lista de elementos al presionar sobre el botón antes mencionado, este le permite al usuario seleccionar un elemento entre el conjunto disponible, este widget también puede ser editable, es decir el usuario podrá modificar el contenido de cada elemento en la lista, si así lo disponemos.

QComboBox con texto

Para añadir los elementos usaremos los métodos addItems(QStringList) donde usaremos una lista de cadenas de texto, una para cada elemento que deseemos mostrar, podemos usar addItem(QString) para agregar uno a uno cada elemento.

QStringList items;                                                            
items.append("...");                                                          
items.append("Veraguas");                                                     
items.append("Chiriquí");                                                     
items.append("Bocas del Toro");                                               
items.append("Darién");                                                       
                                                                              
QComboBox *cbx = new QComboBox();                                             
cbx->addItems(items);                                                         
                                                                              
QLabel *lbl = new QLabel("Elemento seleccionado.");                           
                                                                              
QObject::connect(cbx, &QComboBox::currentTextChanged, lbl, &QLabel::setText);

Cuando la selección cambie se emite QComboBox::currentTextChanged conectamos este signal al slot del QLabel::setText de este modo cuando el usuario seleccione un elemento este se mostrará en la etiqueta, esto lo hacemos en la última línea de código.

QComboBox con icono

Los elementos que muestre el widget pueden ir acompañados de un icono, esto los hace visualmente más atractivos, para hacer esto solo debemos agregar el elemento e indicar su respectivo icono, de la siguiente manera:

QComboBox *cbx = new QComboBox();                      
cbx->addItem(QIcon(":/banderas/panama.gif"), "Panamá");
cbx->addItem(QIcon(":/banderas/mexico.png"), "Mexico");
cbx->addItem(QIcon(":/banderas/spain.png"),  "España");

En este ejemplo los iconos se encuentran dentro del archivo de recursos en la carpeta banderas, el resultado es el siguiente:

QComboBox con icono

Como hacer si deseamos cambiar el elemento seleccionado desde programación, para esto disponemos del método setCurrentIndex(), con el podemos establecer el índice del elemento actualmente seleccionado, por ejemplo, al presionar un botón seleccionamos el segundo elemento:

QComboBox *cbx = new QComboBox();                        
cbx->addItems(items);                                    
                                  
QPushButton *btn = new QPushButton("btn");                                                                  
QObject::connect(btn, &QPushButton::clicked, [=]() {     
    cbx->setCurrentIndex(2);                             
});

Uso de QSlider

EL widget QSlider es simple, nos permite seleccionar un valor dentro del rango determinado, para hacer esto el usuario debe arrastrar el indicador hasta la posición del valor deseado, este widget puede posicionarse de forma vertical y horizontal, utilizaremos los métodos setMaximun(int) y setMinimun(int) , veamos un ejemplo:

QSlider *slider = new QSlider(Qt::Horizontal);                 
slider->setMaximum(50);                                        
slider->setMinimum(10);                                        
                                                               
QObject::connect(slider, &QSlider::valueChanged, [=](int val) {
    std::cout << "value: " << val << std::endl;                
});

Cuando se cambia el valor se emite el signal QSlider::valueChanged es posible cambiar el valor desde código usando setValue(int), de manera similar usaríamos int value() para obtener el valor actual.

QSlider de Qt

Para mostrar las marcas que se muestran debajo debemos indicar alguna de estas opciones: QSlider::NoTicks, QSlider::TicksBothSides, QSlider::TicksAbove, QSlider::TicksBelow, QSlider::TicksLeft, QSlider::TicksRight, las cuales nos permiten ocultar las marcas, esta es la opción por defecto, mostrarlas en ambos lados, o en cualquiera de los lados dependiendo de la posición del widget.

QSlider *slider = new QSlider(Qt::Horizontal);
slider->setTickPosition(QSlider::TicksBelow); 
slider->setTickInterval(5);

El método setTickPosition() define el lugar donde se muestran las marcas mientras setTickInterval() establece el intervalo en que se muestras estas marcas.

Para complementar puedes ver el ejemplo oficial: http://doc.qt.io/qt-5/qtwidgets-widgets-sliders-example.html

Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

Controles y Contenedores JavaFX 8 - I

Conectar SQL Server con Java

tkinter Canvas