Russian Qt Forum

Qt => Model-View (MV) => Тема начата: unkeep от Август 22, 2015, 16:29



Название: [РЕШЕНО] в QStandardItemModel EditRole==DisplayRole ?
Отправлено: unkeep от Август 22, 2015, 16:29
Можно ли в QStandardItemModel под Edit и Display ролями положить разные данные?
у меня не получается... :-[

пока выкручиваюсь так

Код
C++ (Qt)
class MyModel : public QStandardItemModel
{
public:
   MyModel(QObject* parent) : QStandardItemModel(parent){}
 
   QVariant data(const QModelIndex &index, int role) const
   {
       if (role == Qt::DisplayRole)
       {
           return QStandardItemModel::data(index).toString() + "item";
       }
 
       return QStandardItemModel::data(index, role);
   }
};


Название: Re: в QStandardItemModel EditRole==DisplayRole ?
Отправлено: PimenS от Август 22, 2015, 19:01
Проблем возникать не должно. Может я просто не понял, что значит разные данные.

Код:
switch(role){
    case Qt::EditRole: {
        return value;
        break;
    }
    case Qt::DisplayRole: {
        if (value.type() == QVariant::Double)
            return QString("%L1").arg(value.toDouble(), 0, 'f', 2);
        else if (value.type() == QVariant::Date)
            return value.toDate().toString("dd.MM.yyyy");
        else
            return value;

        break;
    }
}


Название: Re: в QStandardItemModel EditRole==DisplayRole ?
Отправлено: unkeep от Август 25, 2015, 14:17
Проблема в том что QStandardItemModel хранит данные для этих двух ролей в одной и той же памяти.

Код
C++ (Qt)
model->setData(1, Qt::EditRole);
model->setData("one", Qt::DisplayRole);
qDebug() <<  model->data(Qt::EditRole); // "one"
 
model->setData("one", Qt::DisplayRole);
model->setData(1, Qt::EditRole);
qDebug() <<  model->data(Qt::DisplayRole); // 1

остаётся только хранить данные под Qt::EditRole, и переопределять data для Qt::DisplayRole.
И меня уже в принципе это устраивает)