LINUX.ORG.RU

Не отображаются вводимые данные при редактировании через прокси модель Qt.

 


0

1

Создал модель данных, переопределил нужные методы для отображения и редактирования. Всё работало отлично. После создания прокси модели появилась проблема. При редактировании не видно вводимых данных, только после нажатия на «enter» или перехода на другую ячейку. Мне нужно создавать своего делегата или можно обойтись малой кровью?


Ответ на: комментарий от ivan88

cpp прокси

WGProxyModel::WGProxyModel(QObject *parent) : QAbstractProxyModel(parent), mIndexOfColumn(0)
{

}

void WGProxyModel::chageIndexColumn(int index)
{
    mIndexOfColumn = index;
    emit changeImage(mIndexOfColumn);
    emit dataChanged(sourceModel()->index(0, 0), sourceModel()->index(14, mIndexOfColumn));
}

QModelIndex WGProxyModel::index(int row, int column, const QModelIndex &parent) const
{
    return createIndex(row, mIndexOfColumn );
}

QModelIndex WGProxyModel::parent(const QModelIndex &child) const
{
    return QModelIndex();
}

int WGProxyModel::rowCount(const QModelIndex &parent) const
{
    return sourceModel()->rowCount() - 3;
}

int WGProxyModel::columnCount(const QModelIndex &parent) const
{
    return 1;
}

QModelIndex WGProxyModel::mapToSource(const QModelIndex &proxyIndex) const
{
    return sourceModel()->index(proxyIndex.row(),proxyIndex.column());
}

QModelIndex WGProxyModel::mapFromSource(const QModelIndex &sourceIndex) const
{
    return sourceIndex;//sourceModel()->index(sourceIndex.row(),sourceIndex.column());
}

bool WGProxyModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    if(index.isValid() && role == Qt::EditRole)
    {
        sourceModel()->setData(index, value, role);
    }
    return false;
}

Qt::ItemFlags WGProxyModel::flags(const QModelIndex &index) const
{
    Qt::ItemFlags flags = QAbstractProxyModel::flags(index);
    return index.isValid() ? (flags | Qt::ItemIsEditable) : flags;
}
ivan88
() автор топика
Ответ на: комментарий от ivan88

QVariant — это то, что ты возвращаешь из функции data(). Я же спрашиваю, что это есть само по себе — текст, числа, etc

XMs ★★★★★
()
Ответ на: комментарий от ivan88

А вьюхе на соответствующий столбец какой делегат назначен? Насколько я помню, обычные всегда как текст редактировали, и только QStyledItemDelegate (или как там его) создавал для чисел спинбоксы

XMs ★★★★★
()
Ответ на: комментарий от ivan88

Ввести-то я что угодно могу, а после свалидирую при записи в модель.

ivan88
() автор топика
Ответ на: комментарий от ivan88

Я давно работал с моделями, вьюхами и вот этим вот всем, поэтому мог забыть нюансы, но у меня были проблемы при неназначенном делегате. Хотя прокси-моделями я не пользовался. Кстати, а зачем ты делаешь свою? Вроде была уже готовая, она чем-то не подошла?

XMs ★★★★★
()
Ответ на: комментарий от XMs

В основное модели у меня шесть колонок с данными. И две вьюхи, которые отображают по одной колонке.

ivan88
() автор топика
Ответ на: комментарий от ivan88

Использовал «QIdentityProxyModel», всё заработало. Коллективный разум в лице XMs помог. Низкий поклон тебе)

ivan88
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.