0

使用计时器我checkBookings()反复调用插槽。我能够编译并运行该程序,但是在执行上述 FOR 循环时它会崩溃。

错误:“QList::at 中的 ASSERT 失败:“索引超出范围”,文件 ../../../../Qt/2010.05/qt/include/QtCore/../../src/corelib /tools/qlist.h,第 455 行 传递给 C 运行时函数的参数无效。传递给 C 运行时函数的参数无效。”

我的代码是:

timer = new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(checkBookings()));
timer->start(500000);

void Canvas::checkBookings()
{

 QString dateStr;

 for(int i= 0;i<=qlist.count();i++)
    {
      dateStr = qList.at(i).at(6);
    }

}
4

1 回答 1

5

在 for 循环中将 <= 替换为 <。像这样:

for(int i= 0;i<qlist.count();i++)
{
  dateStr = qList.at(i).at(6);
}

原因是 qList.count() 是列表中的项目数,因此您永远不想尝试使用 qList.at(qlist.count())

编辑:通过在 for 循环中有 <= 记住 for 循环的最后一次迭代 i=qlist.count()。因此,当代码在循环中执行语句时,它实际上是这样做的:

dateStr = qList.at(qList.count()).at(6);
于 2012-11-23T23:24:46.727 回答