Не сохраняется изменение, внесенное с помощью делегата
От: arfaa  
Дата: 03.06.20 13:48
Оценка:
Добрый день, проблема в том, что в нужном месте отрисовываю QCombobox(во втором столбце), состоящий из итемов A,B,C,D выбираю из него символ , к примеру С, но после entera или смене фокуса значение не сохраняется, ниже приведу код, который по-моему влияет на сохранение и изменение:

Model:

Qt::ItemFlags MetricTypesModel::flags(const QModelIndex& index) const
{
    if (!index.isValid())
        return Qt::NoItemFlags;

    Qt::ItemFlags theFlags = QAbstractItemModel::flags(index);
    MetricTypesItem* Item = static_cast<MetricTypesItem*>(index.internalPointer());
    if (index.column() == 2 && Item->childCount() == 0)
    {
        theFlags = Qt::ItemIsEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled | Qt::ItemIsEditable;
        //theFlags |= Qt::ItemIsUserCheckable;
    }
    if (index.column() == 1 && Item->childCount() > 0)
    {
        theFlags = Qt::ItemIsSelectable;
        theFlags |= Qt::ItemIsUserCheckable;
    }


    return theFlags;
}

bool MetricTypesModel::setData(const QModelIndex& index, const QVariant& value, int role)
{
    if (index.isValid() && role == Qt::EditRole)
    {
        MetricTypesItem* Item = static_cast<MetricTypesItem*>(index.internalPointer());
        Item->setData(value,Qt::DisplayRole);
        emit dataChanged(index, index);
        return true;
    }
    return false;
}

QVariant MetricTypesModel::data(const QModelIndex& index, int role) const
{
    if (!index.isValid())
        return QVariant();

    MetricTypesItem* item = static_cast<MetricTypesItem*>(index.internalPointer());

    if (role == Qt::CheckStateRole && index.column() == 1 && item->childCount() > 0)
        return static_cast<int>(item->isChecked() ? Qt::Checked : Qt::Unchecked);
    if (role == Qt::CheckStateRole && index.column() == 6 && item->childCount() == 0)
        return static_cast<int>(item->isChecked() ? Qt::Checked : Qt::Unchecked);

    if (role == Qt::DisplayRole)
    {
        QString str = item->data(index.column()).toString();
        return item->data(index.column());
    }

    return QVariant();
}


Delegate:
void MetricTypesDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
{
    QComboBox* comboBox = static_cast<QComboBox*>(editor);
    QString value = comboBox->currentText();
    model->blockSignals(true);
    model->setData(index, value, Qt::EditRole);
    model->blockSignals(false);
    model->setData(index, comboBox->itemData(comboBox->currentIndex()), Qt::UserRole + 1);
}


подскажите, что нужно еще прописать, чтобы сохранялось значение, выбранное в QComboBox,спасибо
Отредактировано 03.06.2020 13:51 arfaa . Предыдущая версия . Еще …
Отредактировано 03.06.2020 13:50 arfaa . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.