QTableView添加项目崩溃

时间:2013-06-07 09:57:58

标签: c++ qt qt-creator qtableview

我是Qt的新手。将从XML读取的项目添加到QTableView时,我的程序崩溃了。

XML文件:

<?xml version =“1.0”encoding =“UTF-8”?>
    <帐户>
    <主机> host1的< /主机>
    <登录> dawid1< /登录>
    <密码> PASS1< /密码和GT;
    <状态>&STATUS1 LT; /状态>
    <主机>主机2< /主机>
    <登录> dawid2< /登录>
    <密码> PASS2< /密码和GT;
    <状态>&STATUS2 LT; /状态>
< /帐户与GT;

添加商品代码:

QXmlStreamReader xmlReader;
QAbstractItemModel *model = ui->tableView->model();

xmlReader.setDevice(&file);

while(!xmlReader.atEnd())
{
    QXmlStreamReader::TokenType token = xmlReader.readNext();

    if(token == QXmlStreamReader::StartDocument)
    {
        continue;
    }

    if(token == QXmlStreamReader::StartElement)
    {
        if(xmlReader.name() == "Accounts")
            continue;

        if(xmlReader.name() == "Host")
        {
            model->insertRow(model->rowCount());
            model->setData(model->index(model->rowCount(),0), xmlReader.readElementText()); //probably here crash
        }
        if(xmlReader.name() == "Login")
        {
            model->insertRow(model->rowCount());
            model->setData(model->index(model->rowCount(),1), xmlReader.readElementText());
        }
        if(xmlReader.name() == "Password")
        {
            model->insertRow(model->rowCount());
            model->setData(model->index(model->rowCount(),2), xmlReader.readElementText());
        }
        if(xmlReader.name() == "Status")
        {
            model->insertRow(model->rowCount());
            model->setData(model->index(model->rowCount(),3), xmlReader.readElementText());
        }
    }

    if(xmlReader.hasError())
    {
            QMessageBox::critical(this, "XML Parse Error",xmlReader.errorString(), QMessageBox::Ok);
    }
}
xmlReader.clear();
file.close();

我的问题是:

1。为什么程序崩溃以及如何解决?

2。为了将来:如何本地化崩溃原因并在QtCreator中修复它?

问候,大卫

1 个答案:

答案 0 :(得分:3)

至于您的问题编号“2”:您可以在 QtCreator 中使用调试器运行您的代码:它是第二个类似游戏的按钮,上面有一个小错误。这样,当您的应用程序崩溃时,您将知道在哪里。

导致崩溃的行将由行号旁边的箭头指向,并且您将具有可用的堆栈跟踪和变量值查找。

此外,如果您怀疑哪部分代码导致崩溃(或其他意外行为),您可以在它之前放置一个断点。单击行号,应显示一个小红球。然后使用调试器运行,您的应用程序将在断点处停止,这样您就可以查看变量值,然后逐步跟踪执行。

相关问题