0

タイマーを使用して、スロットcheckBookings()を繰り返し呼び出します。プログラムをコンパイルして実行することはできますが、上記の FOR ループを実行するとクラッシュします。

エラー:「QList での ASSERT 失敗::at:「インデックスが範囲外です」、ファイル ../../../../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 に答える