Te has liado. Como te comenté, los iconos se establecen en el rol "DecorationRole" no en "DisplayRole":
Código C++:
Ver originalif (index.column()==3)
{
if (role == Qt::DecorationRole)
{
return iconos[persona[index.row()].estado]; //devuelvo un QIcon
}
}
Por otro lado, entiendo que no es algo idóneo el tener información duplicada. Lo suyo sería crear una clase que almacene los iconos... no se, quizás algo del tipo:
Código C++:
Ver originalclass Resources
{
public:
static std::vector< QPixmap > GetIcons( );
};
Con un diseño de este tipo, tanto el modelo como el editor pueden acceder a la misma fuente de iconos.
Y, para terminar. Cuando se editan datos en el modelo no se ha de usar "DecorationRole", sino "EditRole". Por supuesto, para que esto funcione, tienes que sobrecargar el método "setData" del modelo para que, dados un index, un QVariant y un rol (EditRole por defecto) sea capaz de modificar la información almacenada en el modelo:
Código C++:
Ver originalbool MiModelo::setData(const QModelIndex & index, const QVariant & value, int role )
{
bool to_return = false;
if ( index.column( ) == 3 && role == Qt::EditRole )
{
// "value", que es un int, te indica el id del icono seleccionado.
// Aquí tienes que actualizar el elemento correspondiente.
to_return = true;
}
return to_return;
}
Bueno, matizo. Si en "setData", cambias "EditRole" por "DisplayRole", entonces podrás guardar cosas usando "DisplayRole", pero no es el comportamiento por defecto. El editor predeterminado intentará modificar tu modelo usando "EditRole", por lo que lo lógico es que te amoldes al uso estándar de la función para evitar problemas (si, por ejemplo, cambias de widget por uno que has comprado).
Un saludo.