QAbstractItemModel

liu54ee 2015-09-13 07:02:16

//    QAbstractItemModel::reset();

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

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

请大家说说这两个函数怎么用的?
...全文
730 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
弓人水 2015-09-14
  • 打赏
  • 举报
回复
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
GreenArrowMan 2015-09-14
  • 打赏
  • 举报
回复
这样吧。
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();

}
liu54ee 2015-09-14
  • 打赏
  • 举报
回复
引用 2 楼 yaozhiyong110 的回复:
一般是自定义一个子类 然后再修改数据之前 begin 修改之后end
你的意思是自定义QAbstractItemModel子类,然后再这样吗?
void GQStats::clear()
{
	QAbstractItemModel::endResetModel();
    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::beginResetModel();

}
但是仍然会出错
liu54ee 2015-09-14
  • 打赏
  • 举报
回复
引用 1 楼 zzs0829 的回复:

{
    beginRemoveRows(QModelIndex(), 0, rowCount());
    qDeleteAll(m_data);
    m_data.clear();
    endRemoveRows();
}
不好意思,我不是很明白,能说清楚一些吗?
yaozhiyong110 2015-09-14
  • 打赏
  • 举报
回复
一般是自定义一个子类 然后再修改数据之前 begin 修改之后end
弓人水 2015-09-14
  • 打赏
  • 举报
回复

{
    beginRemoveRows(QModelIndex(), 0, rowCount());
    qDeleteAll(m_data);
    m_data.clear();
    endRemoveRows();
}
弓人水 2015-09-14
  • 打赏
  • 举报
回复
_records[i].clear(); _headers[i].children.clear(); _timer_stack.clear(); _constant_stack.clear(); 看看是不是这四个中有空指针问题
liu54ee 2015-09-14
  • 打赏
  • 举报
回复
引用 5 楼 u011417605 的回复:
这样吧。
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();

}
修正了还是一样的问题

16,818

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧