class RCStandardItem :public QStandardItem
{
public:
    RCStandardItem();
    RCStandardItem(const QString &name);
    RCStandardItem(const QString &name, const QString &text);
    ~RCStandardItem();
    int type() const;
    QString Name() const;
    void setName(const QString &Name);
    QString OldText() const;
    void TextRollBack();
    int Role() const;
protected:
    void setData(const QVariant & value, int role = Qt::UserRole + 1);
private:
    QString _Name;
    QString _OldText;
    int _Role;
};
#include "RCStandardItem.h"
RCStandardItem::RCStandardItem()
{
    this->_Name = "";
    this->_OldText = "";
}
RCStandardItem::RCStandardItem(const QString &name)
{
    this->_Name = name;
    this->_OldText = "";
}
RCStandardItem::RCStandardItem(const QString &name, const QString &text)
{
    this->_Name = name;
    this->_OldText = "";
    this->setText(text);
}
RCStandardItem::~RCStandardItem()
{
}
int RCStandardItem::type() const
{
    return QStandardItem::UserType;
}
QString RCStandardItem::Name() const
{
    return _Name;
}
void RCStandardItem::setName(const QString &Name)
{
    _Name = Name;
}
QString RCStandardItem::OldText() const
{
    return _OldText;
}
void RCStandardItem::TextRollBack()
{
    this->setText(this->_OldText);
    //QVariant v(this->_OldText);
   // QStandardItem::setData(v, 2);
}
void RCStandardItem::setData(const QVariant &value, int role)
{
    this->_Role = role;
    if((role == 0 || role == 2) && value.toString() != this->text())
        this->_OldText = this->text();
    //qDebug()<<role<<this->text()<<this->_OldText<<value.toString();
    
    QStandardItem::setData(value, role);
}
int RCStandardItem::Role() const
{
    return _Role;
}
将使用QStandardItem 替换成这个类来使用就可以了,在setdata方法中可以设置fontground
使用delegate应该也是在setEditorData进行判断的吧