Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Qt. Duda con los delegados

Estas en el tema de Qt. Duda con los delegados en el foro de C/C++ en Foros del Web. Hola de nuevo: Otra duda sobre Qt. Sigo con el tema del modelo/vista/delegado. A duras penas domino el modelo/vista, y ahora con el delegado tengo ...
  #1 (permalink)  
Antiguo 18/12/2014, 12:22
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Qt. Duda con los delegados

Hola de nuevo:

Otra duda sobre Qt.
Sigo con el tema del modelo/vista/delegado.
A duras penas domino el modelo/vista, y ahora con el delegado tengo una duda.
Sigo los ejemplos que veo en qt-project y en otros sitios similares, en los que por lo que veo siempre crean un editor que es un spinbox o un combobox

Ahora estoy intentando adaptar uno de estos ejemplos, para que el editor sea precisamente un QLineEdit, y así más adelante poder aprovechar su capacidad de aceptar expresiones regulares para controlar la entrada de datos.

Pero sencillamente empiezo haciendo ésto:
Código C++:
Ver original
  1. QWidget *MiDelegado::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &/* index */) const
  2. {
  3.     QLineEdit *editor = new QLineEdit(parent);
  4.     //editor->setText("Kakapo");
  5.     return editor;
  6. }

(con MiDelegado heredando de QStyledItemDelegate)

Y en el momento en que voy a editar una celda, el programa se cierra abruptamente.

¿Algún consejo de qué estoy haciendo mal?
Gracias!
__________________
Mi calculadora en Qt
  #2 (permalink)  
Antiguo 18/12/2014, 14:41
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Qt. Duda con los delegados

Hay que sobrecargar varias funciones para que el sistema funcione:

* createEditor: Esta ya la tienes, su función es crear el widget que permitirá la edición.

* setEditorData: Esta función rellena el widget con los datos del modelo.

* setModelData: Esta función recupera la información del widget para almacenarla en el modelo.

* updateEditorGeometry: Esta función permite ubicar correctamente el widget para que aparezca justo encima de la celda a editar.

Si, por ejemplo, no has sobrecargado setEditorData, entonces se acabará llamando a la función por defecto, que coge tu widget y lo castea al que usa la tabla por defecto... si no coinciden los tipos el código acabará accediendo a memoria no válida y petará.

Es necesario sobrecargar todas las funciones a la vez... eso sí, algunas se pueden dejar sin código. Al menos esto permite invalidar la función base.
  #3 (permalink)  
Antiguo 22/12/2014, 14:10
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Qt. Duda con los delegados

Gracias eferion, como siempre.

No lo he probado aún, porque desde el otro día que pregunté no he tenido muchas ocasiones de sentarme delante del ordenador, pero tiene toda la pinta de que es eso.

Por si las moscas no lo marco como solucionado, mientras intento terminar el ejemplo.
__________________
Mi calculadora en Qt

Etiquetas: char, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:48.