当前位置: 代码迷 >> QT开发 >> QAbstractItemModel解决思路
  详细解决方案

QAbstractItemModel解决思路

热度:932   发布时间:2016-04-25 02:51:55.0
QAbstractItemModel

//    QAbstractItemModel::reset();

这个在QT5里面已经移除了,然后搜到一个网页说用下面两条替代
	QAbstractItemModel::beginResetModel();
QAbstractItemModel::endResetModel();

但是我看了官方文档不是直接这么甩两条语句在一起用的
果不其然

请大家说说这两个函数怎么用的?
------解决思路----------------------
一般是自定义一个子类 然后再修改数据之前 begin 修改之后end
------解决思路----------------------
这样吧。

void GQStats::clear()
{
QAbstractItemModel::beginResetModel();
    for (int i = 0; i < NUM_CATEGORIES; i++)
    {
        _records[i].clear();
        _headers[i].children.clear();
    }

    _timer_stack.clear();
    _constant_stack.clear();

    _layout_changed = false;
    _data_changed = false;
//    QAbstractItemModel::reset();
QAbstractItemModel::endResetModel();

}

------解决思路----------------------
void GQStats::clear()
{
    beginRemoveRows(QModelIndex(), 0, rowCount());
    for (int i = 0; i < NUM_CATEGORIES; i++)
    {
        _records[i].clear();
        _headers[i].children.clear();
    }
 
    _timer_stack.clear();
    _constant_stack.clear();
 
    _layout_changed = false;
    _data_changed = false;
//    QAbstractItemModel::reset();
    endRemoveRows();
 
}

clear里面不用reset用remove
------解决思路----------------------
 _records[i].clear();
 _headers[i].children.clear();
_timer_stack.clear();
_constant_stack.clear();

看看是不是这四个中有空指针问题