Russian Qt Forum
Ноябрь 24, 2024, 21:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Прокси-модель растет при удалении строк в исходной модели  (Прочитано 2906 раз)
lexaaleynik
Гость
« : Апрель 20, 2016, 16:15 »

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

Как такое возможно вообще?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 20, 2016, 16:17 »

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
lexaaleynik
Гость
« Ответ #2 : Апрель 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);
}
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #3 : Апрель 20, 2016, 19:20 »

Не смущает название пары методов - beginInsertRows endInsertRows? Даю подсказку: insert - вставить, remove - удалить.
Записан
lexaaleynik
Гость
« Ответ #4 : Апрель 21, 2016, 09:06 »

Не смущает название пары методов - beginInsertRows endInsertRows? Даю подсказку: insert - вставить, remove - удалить.

Чёрт, вот сейчас стыдно было. Спасибо за подсказку.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.