Информация об изменениях

Сообщение Re: Неправильное поведение внутри QAbstractItemModel от 15.05.2020 14:57

Изменено 15.05.2020 14:57 Igore

Re: Неправильное поведение внутри QAbstractItemModel
Здравствуйте, arfaa, Вы писали:

A>Добрый день, работаю с моделью , наследованной от QAbstractItemModel. В одной из функций при одном условии удаляю и заполняю таблицу новым количеством строк, при переключении делаю такой же механизм:

A>
A>    if (_modeRow == 0)
A>    {
A>        if (rowCount() < m_TradeItems.size())
A>        {
A>            beginResetModel();
начали очищать, так очишай
data.reset();
A>            beginRemoveRows(QModelIndex(), 0, _rowCount-1);
A>            endRemoveRows();
A>            beginInsertRows(QModelIndex(), 0, m_TradeItems.size());
A>            endInsertRows();
не нужно beginRemoveRows, endRemoveRows, beginInsertRows, endInsertRows мы уже в beginResetModel находимся, по endResetModel view запросит просто новое количестов строк, столбцов
A>            _rowCount = m_TradeItems.size() + 1;
        
A>            endResetModel();
A>            emit signalSetSpanRow(_rowCount);
A>        }
A>    }
A>    if (_modeRow == 1)
A>    {
A>        if (_rowCount > _nettoTrades.size() + 1 || _rowCount == -1)
A>        {
A>            _rowCount = m_TradeItems.size() + 1;
A>            beginResetModel();
A>            beginRemoveRows(QModelIndex(), 0, m_TradeItems.size());
A>            endRemoveRows();
A>            beginInsertRows(QModelIndex(), 0, _nettoTrades.size());
A>            endInsertRows();
A>            _rowCount = _nettoTrades.size() + 1;
            
A>            endResetModel();
A>            emit signalSetSpanRow(_rowCount);
A>        }
        
A>    }
A>    lt = index(0, 0);
A>    rb = index(_rowCount-1, columnCount() - 1);
A>    emit dataChanged(lt, rb);
A>

A>отрисовка происходит с правильным количеством строк, но в date, к примеру в одном из случаев не падает в точку останова, когда index.column>3 и выводит все неправильно-это при _modeRow = 1, при возврате к первоначальному отображению(_modeRow = 0) все отображается корректно, в date падает во все column > 3 и так далее. Что делаю не так при обновлении таблицы?
Похоже написано лишнее, resetModel это когда полностью обновляешь модель, после этого emit dataChanged и не нужно, view само перечитает, emit dataChanged на beginInsertRows тоже не нужно, view само перечитает. Мало данных по тому что у тебя в модели происходит, можешь поподробнее описать что происходит, с примером кода в data.
Re: Неправильное поведение внутри QAbstractItemModel
Здравствуйте, arfaa, Вы писали:

A>Добрый день, работаю с моделью , наследованной от QAbstractItemModel. В одной из функций при одном условии удаляю и заполняю таблицу новым количеством строк, при переключении делаю такой же механизм:

A> if (_modeRow == 0)
A> {
A> if (rowCount() < m_TradeItems.size())
A> {
A> beginResetModel();
начали очищать, так очишай
data.reset();
A> beginRemoveRows(QModelIndex(), 0, _rowCount-1);
A> endRemoveRows();
A> beginInsertRows(QModelIndex(), 0, m_TradeItems.size());
A> endInsertRows();
не нужно beginRemoveRows, endRemoveRows, beginInsertRows, endInsertRows мы уже в beginResetModel находимся, по endResetModel view запросит просто новое количестов строк, столбцов
A> _rowCount = m_TradeItems.size() + 1;

A> endResetModel();

A> emit signalSetSpanRow(_rowCount);
A> }
A> }
A> if (_modeRow == 1)
A> {
A> if (_rowCount > _nettoTrades.size() + 1 || _rowCount == -1)
A> {
A> _rowCount = m_TradeItems.size() + 1;
A> beginResetModel();
A> beginRemoveRows(QModelIndex(), 0, m_TradeItems.size());
A> endRemoveRows();
A> beginInsertRows(QModelIndex(), 0, _nettoTrades.size());
A> endInsertRows();
A> _rowCount = _nettoTrades.size() + 1;

A> endResetModel();

A> emit signalSetSpanRow(_rowCount);
A> }

A> }

A> lt = index(0, 0);
A> rb = index(_rowCount-1, columnCount() — 1);
A> emit dataChanged(lt, rb);
A>отрисовка происходит с правильным количеством строк, но в date, к примеру в одном из случаев не падает в точку останова, когда index.column>3 и выводит все неправильно-это при _modeRow = 1, при возврате к первоначальному отображению(_modeRow = 0) все отображается корректно, в date падает во все column > 3 и так далее. Что делаю не так при обновлении таблицы?
Похоже написано лишнее, resetModel это когда полностью обновляешь модель, после этого emit dataChanged и не нужно, view само перечитает, emit dataChanged на beginInsertRows тоже не нужно, view само перечитает. Мало данных по тому что у тебя в модели происходит, можешь поподробнее описать что происходит, с примером кода в data.