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