Hola eferion:
Disculpa que sea tan pesado.
Bueno, el caso es que efectivamente tenía el concepto equivocado de cómo funcionaban los métodos
createEditor() y
setEditorData().//mas bien este ultimo
Pero sigo sin tener claro quién se encarga de manejar los iconos.
Voy a ver si consigo esquematizar las cosas:
Por un lado me interesa desacoplar la información de la columna con su icono, porque éste último sólo es una ayuda a la visualización, pero no un dato en sí.
Entonces mi "fuente de datos" no he de tocarla:
Código C++:
Ver originalstruct Persona
{
QString Nombre;
QString Sexo;
int Edad;
eEstado estado;
};
Pero por otra parte, entiendo que es el modelo el que ha de gestionar esos iconos. La verdad es que pensaba que era el propio delegado. Esta parte que me comentas de que el delegado sólo sirve para editar datos....yo pensaba que también es el encargado de mostrarlos :-|
Bueno, pero incorporo esto al modelo:
*.h
Código C++:
Ver originalprivate:
Persona persona[FILAS];
QStringList cabecera;
QIcon iconos[3];
*.cpp
Código C++:
Ver originalMiModelo::MiModelo(QObject *parent) : QAbstractTableModel(parent)
{
------------------------
iconos[0].addFile(QStringLiteral(":/iconos/alegre.png"), QSize(), QIcon::Normal, QIcon::Off);
iconos[1].addFile(QStringLiteral(":/iconos/serio.png"), QSize(), QIcon::Normal, QIcon::Off);
iconos[2].addFile(QStringLiteral(":/iconos/triste.png"), QSize(), QIcon::Normal, QIcon::Off);
Y cuando le sirvo el dato a la vista, hago así en el método data() del modelo:
Código C++:
Ver originalif (index.column()==3)
{
if (role == Qt::DisplayRole)
{
return iconos[persona[index.row()].estado]; //devuelvo un QIcon
}
}
Y ahora, en el delegado hago así:
Código C++:
Ver originalvoid MiDelegado3::setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const
{
QComboBox* miCombo = static_cast<QComboBox*>(editor);
model->setData(index, miCombo->currentText(), Qt::DisplayRole);
}
Pero esto, además de no funcionar, me obliga a tener duplicadas los arrays de iconos, uno para el modelo y otro para el delegado (para alimentar al QComboBox) y sospecho que no es esa la mejor forma de enfocar el tema.
¿En que me estoy equivocando?
Gracias de nuevo