专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > QT开发

显示树形结构的时候setModel出错

发布时间:2010-05-30 19:44:27 文章来源:www.iduyao.cn 采编人员:星星草
展示树形结构的时候setModel出错
我要解析一个schema文件,将解析出来的element用树形结构展示出来。
这个是我的treeItem类
#include <QList>
#include <QVariant>
class TreeItem
{
public:
    TreeItem(const QList<QVariant> &data, TreeItem *parent = 0);
    ~TreeItem();
private:
    //元素信息
    //.....

    //父节点
    TreeItem *parentItem;
    //节点对应数据
    QList<QVariant> itemData;
    //子节点
    QList<TreeItem*> childItems;

public:
    TreeItem *child(int row);
    TreeItem *parent();
    int row() const;
    int childCount() const;
    int columnCount() const;
    void appendChild(TreeItem *child);
};

构造函数
TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
{
    parentItem = parent;
    itemData = data;
}

treeModel类里面的创建根节点和添加子节点的函数
TreeItem * TreeModel::creatRoot()
{
    QList<QVariant> rootData;
    rootData << "element name";
    rootItem = new TreeItem(rootData);
    return rootItem;
}
void TreeModel::addChild( TreeItem *pInfor, TreeItem *parent)
{
      parent->appendChild(pInfor);
}

MainWindow里面设置显示model的代码
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QTreeView *view;
    TreeModel model;

    //创建根节点
    TreeItem *pTreeRoot = model.creatRoot();

    ReadSchemaFile readfile;
    readfile.ReadFile("D:xmlspypnppschemaaaa.xsd",pTreeRoot);

    view = new QTreeView(this);
    view->setModel(&model);
}

现在setModel的时候是没有问题,但是执行完这一句之后再按F5就出错了,提示
在线程0中停止,因为:Exception at 0x6605696d,code:0xc0000005:write access violation at 0x1,flags = 0x0(first chance)
看这提示好像是内存写入错误,但是我看例子中也是创建一个model的对象,setModel的时候传地址。我调试的时候这个model中也是有数据的,第一次使用QT实在不太清楚问题出在哪里了,希望对QT 比较熟悉的帮忙找找问题出在哪里。谢谢。
------解决思路----------------------
首先,你的model定义必须是new一个TreeModel 指针,否则你的代码还是会有类似的错误,
这是因为不是new出的对象,导致MainWindow构造函数完成后,model对象自动析构,而你的rootItem又没有初始化,导致删除一个野指针而出现的错误。
------解决思路----------------------
记得声明一个指针需要初始化, 释放或析构时记得指针判空处理哦
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: