我是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中修复它?
问候,大卫
答案 0 :(得分:3)
至于您的问题编号“2”:您可以在 QtCreator 中使用调试器运行您的代码:它是第二个类似游戏的按钮,上面有一个小错误。这样,当您的应用程序崩溃时,您将知道在哪里。
导致崩溃的行将由行号旁边的箭头指向,并且您将具有可用的堆栈跟踪和变量值查找。
此外,如果您怀疑哪部分代码导致崩溃(或其他意外行为),您可以在它之前放置一个断点。单击行号,应显示一个小红球。然后使用调试器运行,您的应用程序将在断点处停止,这样您就可以查看变量值,然后逐步跟踪执行。