Russian Qt Forum

Qt => Вопросы новичков => Тема начата: lexaaleynik от Апрель 20, 2016, 16:15



Название: Прокси-модель растет при удалении строк в исходной модели
Отправлено: lexaaleynik от Апрель 20, 2016, 16:15
Есть модель (переопределённый QAbstractItemModel) В нем переопределён в том числе и метод removeRows().
К исходной модели прикручена прокси-модель - объект класса QSortFilterProxyModel.
Обнаружилось, что когда я удаляю строку в исходной модели (и она действительно успешно удаляется), в прокси добавляется строка, а должна удаляться оттуда.

Как такое возможно вообще?


Название: Re: Прокси-модель растет при удалении строк в
Отправлено: Пантер от Апрель 20, 2016, 16:17
Покажи код удаления строки.
Ты уже спрашивал про модель http://www.prog.org.ru/index.php?topic=29973.msg220624#msg220624
Ты бот?


Название: Re: Прокси-модель растет при удалении строк в
Отправлено: lexaaleynik от Апрель 20, 2016, 16:49
Покажи код удаления строки.
Ты уже спрашивал про модель http://www.prog.org.ru/index.php?topic=29973.msg220624#msg220624
Ты бот?

Да я уже спрашивал про модель, но я спрашивал немного про другое, не замечаете? Ту проблему я решил. И даже написал, в чём именно была ошибка.

код удаления строки:

Код:
bool MyModel::removeRows(int row, int count, const QModelIndex &parent)
{// row=1, always
    beginInsertRows(parent, row, row + count - 1);
    vec->delRow(row);
    endInsertRows();
    return true;
}

vec - это объект класса Vector2dRoles.

vector2droles.h:

Код:
#ifndef VECTOR2DROLES_H
#define VECTOR2DROLES_H

#include <QVector>
#include <QColor>

class Vector2dRoles
{
public:
    Vector2dRoles();
    Vector2dRoles(int _sizeX, int _sizeY);
    void appendRow(QColor _clr, QString _str);
    void delRow(int numRow);
    QVector< QVector< QString > > str;
    QVector< QVector< QColor > > clr;
private:
    int sizeY;
    QString dftStr;
    QColor dftClr;
};

#endif // VECTOR2DROLES_H

vector2droles.cpp:

Код:
#include "vector2droles.h"
#include <QDebug>

Vector2dRoles::Vector2dRoles(int _sizeX, int _sizeY)
{
    dftStr = "";
    dftClr = QColor(Qt::gray);
    sizeY = _sizeY;
    str = QVector< QVector< QString > >(_sizeX, QVector< QString >(_sizeY, dftStr));
    clr = QVector< QVector< QColor > >(_sizeX, QVector< QColor >(_sizeY, dftClr));
}

void Vector2dRoles::appendRow(QColor _clr, QString _str)
{
    QVector<QString> strVec = QVector<QString>(sizeY, _str);
    QVector<QColor> clrVec = QVector<QColor>(sizeY, _clr);
    str.append(strVec);
    clr.append(clrVec);
}

void Vector2dRoles::delRow(int numRow)
{
    str.remove(numRow);
    clr.remove(numRow);
}


Название: Re: Прокси-модель растет при удалении строк в исходной модели
Отправлено: Hellraiser от Апрель 20, 2016, 19:20
Не смущает название пары методов - beginInsertRows endInsertRows? Даю подсказку: insert - вставить, remove - удалить.


Название: Re: Прокси-модель растет при удалении строк в исходной модели
Отправлено: lexaaleynik от Апрель 21, 2016, 09:06
Не смущает название пары методов - beginInsertRows endInsertRows? Даю подсказку: insert - вставить, remove - удалить.

Чёрт, вот сейчас стыдно было. Спасибо за подсказку.