我使用Qt 5.2.0(MSVC 2010)。
我在Qt a ComboBox中添加了我的表单。
然后我想用数字填充它:
for (i = 0; i < n; i++){
ui->tableCombo->addItem(QString::number(i));
}
当我在表单中添加第一个元素时,它会成功添加数字。但是当我把它留空时,它会抛出一个错误:
在QVector :: operator []中ASSERT失败:“索引超出范围”
调试器显示此行中发生错误。整条生产线上没有QVector。
添加qDebug()后。
qDebug() << "readFileToStringList: msg10";
for (i = 0; i < n; i++){
qDebug() << "readFileToStringList: msg20 i = " << i;
ui->tableCombo->addItem(QString::number(i+1));
qDebug() << "readFileToStringList: msg30";
}
qDebug() << "readFileToStringList: msg40";
我得到了相同的结果
readFileToStringList: msg10
readFileToStringList: msg20 i = 0
ASSERT failure in QVector<T>::operator[]: "index out of range", file C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include/QtCore/qvector.h, line 369
答案 0 :(得分:4)
我遇到了这个确切的问题,并且几个小时都无法解决。我意识到:: addItem()触发了indexChanged(int)信号,我连接到一个导致容器超出范围错误的函数。
我想说这也可能是问题所在,但我确信自那时起OP一直在继续。对我而言,在插入新项目时会调用indexChanged信号并不直观,因为它实际上并没有改变currentIndex。
希望如果其他人被绊倒,这将有助于他们!
答案 1 :(得分:1)
addItem()
不会抛出该错误!我很肯定它来自您代码中的其他指令。
Qt文档在Debugging Techniques上有一个完整的部分,但是如果你害怕调试器,你可以使用 穷人调试器 :传播您认为对此问题负责的说明之前和之后的几条qDebug()
条消息:
qDebug() << "methodX: msg10";
for (i = 0; i < n; i++){
qDebug() << "methodX: msg20 i = " << i;
ui->tableCombo->addItem(QString::number(i));
qDebug() << "methodX: msg30";
}
qDebug() << "methodX: msg40";
如果消息methodX: msg30
被打印到屏幕上,则表示addItem()
没有导致错误。