Otro delegado para la columna de edad. En este caso la idea es usar expresiones regulares para limitar la entrada a números y además colorear las celdas en función de la edad:
midelegado2.cpp
Código C++:
Ver original#include "midelegado2.h"
#include <QLineEdit>
#include <QRegExpValidator>
#include <QPainter>
MiDelegado2::MiDelegado2(QWidget *parent) : QStyledItemDelegate(parent) {}
QWidget * MiDelegado2::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
Q_UNUSED (index);
Q_UNUSED (option);
QLineEdit* miEditor = new QLineEdit(parent);
QRegExpValidator* validadorEdad = new QRegExpValidator(QRegExp("[0-9]{1,2}"),miEditor);
miEditor->setValidator(validadorEdad);
return miEditor;
}
void MiDelegado2::setEditorData ( QWidget * editor, const QModelIndex & index ) const
{
QLineEdit* miEditor = static_cast<QLineEdit*>(editor);
miEditor->setText(QString::number(index.data().toInt()));
}
void MiDelegado2::setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const
{
QLineEdit* miEditor = static_cast<QLineEdit*>(editor);
model->setData(index,miEditor->text());
}
void MiDelegado2::updateEditorGeometry ( QWidget * editor, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
Q_UNUSED (index);
editor->setGeometry(option.rect);
}
void MiDelegado2::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
QColor colorInfantil(Qt::green);
QColor colorMadurez(Qt::yellow);
QColor colorVejez(Qt::red);
painter->save();
if (index.data().toInt()>=0 && index.data().toInt()<25)
{
painter->fillRect(option.rect,colorInfantil);
}
else if (index.data().toInt()>=25 && index.data().toInt()<65)
{
painter->fillRect(option.rect,colorMadurez);
}
else if (index.data().toInt()>=65)
{
painter->fillRect(option.rect,colorVejez);
}
QPen colorTexto(Qt::black);
painter->setPen(colorTexto);
painter->drawText(option.rect,Qt::AlignCenter,index.data().toString());
painter->restore();
}
Y por último, para ensayar con el tema de ver la información en forma de iconos, tengo un campo de estado de ánimo. Y este es el que no funciona:
midelegado3.cpp
Código C++:
Ver original#include "midelegado3.h"
#include <QComboBox>
#include <QLabel>
#include <QDebug>
MiDelegado3::MiDelegado3(QWidget *parent) : QStyledItemDelegate(parent) {}
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;
}
void MiDelegado3::setEditorData (QWidget * editor, const QModelIndex & index) const
{
QComboBox* miEditor = static_cast<QComboBox*>(editor);
switch (index.data().toInt())
{
case 0:
{
//model->setData( index, miEditor->currentIndex( ) );
//otro->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;
}
}
void MiDelegado3::setModelData (QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const
{
QComboBox* miCombo = static_cast<QComboBox*>(editor);
model->setData(index,miCombo->currentIndex());
}
(sigue)