Sigo con el tema del Modelo-Vista-Delegados
Estaba haciendo delegados personalizados para las columnas de mi ejemplo, cuando he querido hacer un delegado en el cual el editor para la entrada de datos me gustaría que fuera diferente al editor que los muestre.
Mi idea es la siguiente:
El editor de entrada de datos en un QComboBox, y maneja 3 indices, cada uno con un icono y una leyenda.
El editor que muestra los datos es un QLabel, y ha de mostrar el icono que le corresponda.
Este es el código de esa parte:
Código C++:
Ver original
QWidget* MiDelegado3::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const { Q_UNUSED (index); Q_UNUSED (option); QComboBox* miCombo = new QComboBox(parent); QIcon icono1, icono2, icono3; icono1.addFile(QStringLiteral(":/iconos/alegre.png"), QSize(), QIcon::Normal, QIcon::Off); miCombo->addItem(icono1, "Alegre"); icono2.addFile(QStringLiteral(":/iconos/serio.png"), QSize(), QIcon::Normal, QIcon::Off); miCombo->addItem(icono2, "Serio"); icono3.addFile(QStringLiteral(":/iconos/triste.png"), QSize(), QIcon::Normal, QIcon::Off); miCombo->addItem(icono3, "Triste"); return miCombo; }
Y ahora la parte que me da problemas:
Modo "clásico"....esta forma me cierra el programa de forma abrupta
Código C++:
Ver original
void MiDelegado3::setEditorData (QWidget * editor, const QModelIndex & index) const { QLabel* miEditor = static_cast<QLabel*>(editor); switch (index.data().toInt()) { case 0: { miEditor->setPixmap(QPixmap(QString::fromUtf8(":/iconos/alegre.png"))); break; } case 1: { miEditor->setPixmap(QPixmap(QString::fromUtf8(":/iconos/serio.png"))); break; } case 2: { miEditor->setPixmap(QPixmap(QString::fromUtf8(":/iconos/triste.png"))); break; } default: break; } }
Mi intento:
Código C++:
Ver original
void MiDelegado3::setEditorData (QWidget * editor, const QModelIndex & index) const { QLabel* miEditor = static_cast<QLabel*>(editor); switch (index.data().toInt()) { case 0: { delete miEditor; QLabel* miEditor = new QLabel(editor->parentWidget()); miEditor->setPixmap(QPixmap(QString::fromUtf8(":/iconos/alegre.png"))); break; } case 1: { ............................. //etc } }
El problema de esta forma es que no estoy ligando el editor al widget padre, por lo que aparece flotando en la pantalla y obviamente permanece ahí después de haber cerrado la tabla.
Pensaba que de esta forma podría ligar el editor al padre del editor que se pasa como parámetro, pero no funciona
QLabel* miEditor = new QLabel(editor->parentWidget());
En fin, como siempre, muchas gracias