Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/03/2015, 02:05
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Qt. Delegados. Usar diferente widget para editar y para mostrar

En "createEditor" has creado un QComboBox, luego en "setEditorData" y "setModelData" has de interactuar con un QComboBox, no con un QLabel.

El widget o el mecanismo que use Qt para visualizar los datos fuera de la edición no es algo que te importe ahora mismo. Tú estás jugando ahora mismo con la edición.

* "createEditor" es una función que te permite personalizar el widget de edición que se va a usar al editar el contenido de una celda determinada

* "setEditorData" te permite definir el contenido para el widget creado anteriormente. Dado que has creado un widget que no es el que viene por defecto, tu eres el responsable de rellenarlo.

* "setModelData" te permite recuperar el contenido del widget de edición para almacenarlo en el modelo. Lo mismo que antes, es tu widget y tu tienes que saber cómo recuperar el contenido.

setEditorData debería quedar tal que (presupongo que en el modelo estás almacenando un int a modo de índice del icono. Si almacenas la ruta del icono tendrás que modificarlo):

Código C++:
Ver original
  1. void MiDelegado3::setEditorData (QWidget * editor, const QModelIndex & index) const
  2. {
  3.     QComboBox* miEditor = static_cast<QComboBox*>(editor);
  4.     miEditor->setCurrentIndex( index.data( ).toInt( ) );
  5. }

y, para recuperar el contenido:

Código C++:
Ver original
  1. void MiDelegado3::setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const
  2. {
  3.     QComboBox* miEditor = static_cast<QComboBox*>(editor);
  4.     model->setData( index, miEditor->currentIndex( ) );
  5. }

No puedo compilar el código porque no tengo el modelo completo. No obstante creo que este código debería funcionar.

Un saludo.