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.
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:
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.
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
Publicar un comentario