QList索引超出范围

时间:2012-11-23 23:21:31

标签: qt indexing qlist qtimer

使用计时器我反复拨打插槽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);
    }

}

1 个答案:

答案 0 :(得分:5)

将&lt; =替换为&lt;在你的for循环中。像这样:

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

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

编辑: 通过在For循环中具有&lt; =,记住for循环的最后一次迭代i = qlist.count()。那么当代码在循环中执行语句时,它基本上就是这样做的:

dateStr = qList.at(qList.count()).at(6);