2011-10-03 13 views
11

Utilizando un QComboBox normal poblado con elementos, si currentIndex está establecido en -1, el widget está vacío. Sería muy útil tener un texto descriptivo inicial visible en el cuadro combinado (por ejemplo, "- Seleccione País--", "--Elegir tema--", etc.) que no se muestra en la lista desplegable.¿Cómo establecer texto predeterminado no seleccionable en QComboBox?

No he podido encontrar nada en la documentación ni ninguna pregunta anterior con respuestas.

Respuesta

21

Parece que el caso no se anticipó en la API del cuadro combinado. Pero con la flexibilidad del modelo subyacente parece que debería ser capaz de añadir su --Seleccionar País-- como primer elemento "legítimo", y luego evitar que sea seleccionable por el usuario:

QStandardItemModel* model = 
     qobject_cast<QStandardItemModel*>(comboBox->model()); 
QModelIndex firstIndex = model->index(0, comboBox->modelColumn(), 
     comboBox->rootModelIndex()); 
QStandardItem* firstItem = model->itemFromIndex(firstIndex); 
firstItem->setSelectable(false); 

Dependiendo de lo el comportamiento preciso que desea, es posible que desee utilizar setEnabled en su lugar. O yo personalmente prefiero que si era sólo un elemento de color diferente que podría configurar de nuevo a:

Qt, How do I change the text color of one item of a QComboBox? (C++)

(No me gusta cuando hago clic en algo y luego quedan atrapados a en el que no pueda volver donde estaba, incluso si se trata de un-todavía-estado seleccionado nada-!)

+0

Excelente! Aparentemente hay una parte de Qt que no he tocado, lo que me parece muy útil para la personalización. De la pregunta SO a la que se vinculó, cambiar el color de fondo hace que se vea muy bien, y probablemente sea mejor de lo que había imaginado originalmente. firstItem-> setData (Qt :: lightGray, Qt :: BackgroundRole); (No me importaría si agregaste esto a tu respuesta). – swalog

+0

@EXIT_FAILURE Creo que su comentario cubre su alternativa, ya que no lo he probado, así que no sé si me gustaría. :) Pero sí, Qt ofrece algo de originalidad, si todos nos atacamos, tal vez podamos detener GTK y wxWidgets. : -/http://stackoverflow.com/questions/7545804/modeless-parentless-wxdialog-still-always-above-wxframe-window-in-z-order/ – HostileFork

Cuestiones relacionadas