Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/09/2016, 04:40
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Qt.QTableView. Varias dudas

Cita:
Iniciado por dehm Ver Mensaje
ahora me encuentro que la tecla F2 ya no activa el modo de edición
Con eso ahora mismo no puedo ayudarte. Quiero decir, no se qué cambios has realizado por lo que no puedo deducir qué tienes que cambiar para que vuelva a funcionar.

Publicar el código del filtro de eventos así como de su uso sería un buen punto de partida.

Cita:
Iniciado por dehm Ver Mensaje
No veo en QTableView ni en QAbstractItemView ninguna función que indique si hay una fila seleccionada.
La selección corre a cargo de QItemSelectionModel. Mira en QTableView::selectionModel().

Cita:
Iniciado por dehm Ver Mensaje
Me gustaría que cuando cambiase el contenido de una celda se activase una función o señal que llamase a una función que se encargara de hacer alguna función asociada (realmente sería actualizar el dato en la fuente original, más allá del modelo)
El modelo tiene un método llamado setData que es llamado cuando se realizan cambios en el modelo... prueba a colocar ahí la lógica correspondiente.

Código C++:
Ver original
  1. bool Modelo::setData(const QModelIndex &index, const QVariant &value, int role)
  2. {
  3.   if( role == Qt::EditRole )
  4.     emit HaCambiadoElModelo();
  5. }

Cita:
Iniciado por dehm Ver Mensaje
El caso es que una de las columnas es un QComboBox donde se pide/muestra el sexo de una persona, pero en lugar de poner texto sale un pequeño icono de un niño o una niña (es para los sobrinos, je je). Pero para que me mantenga el índice actual cuando paso por esa celda en modo de edición, he de enviar junto al icono, el índice asociado, y entonces se me ve el icono junto a un número (0 niños, 1 niñas). Y me gustaría que no se viera el número pero que no se perdiera el índice.
Los modelos gestionan la información en base a roles. DisplayRole se llama cuando se quiere visualizar el contenido de la celda mientras que DecorationRole se usa para mostrar una imagen junto al contenido de la celda... por poner un par de ejemplos.

Siguiendo esa dinámica encuentras UserRole que sirve como punto de partida para definir roles personalizados. La idea es definir un rol personalizado para recuperar el identificador asociado a una imagen. La vista nunca va a preguntar por ese rol porque no sabe ni que existe ni tampoco qué hacer con el. Es un rol para tus usos propios:

Código C++:
Ver original
  1. const int ImageIndexRole = Qt::UserRole+1;
  2.  
  3. QVariant Modelo::data(const QModelIndex &index, int role) const
  4. {
  5.   switch( role )
  6.   {
  7.     case ImageIndexRole:
  8.       // Devuelves el índice de la imagen
  9.       break;
  10.    }
  11. }

Y para preguntar por este dato:

Código C++:
Ver original
  1. Modelo model;
  2. QModelIndex index = model.index(0,0);
  3. qDebug() << model->data(index,ImageIndexRole);

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Última edición por eferion; 12/09/2016 a las 04:53