在Qt中添加空comboBox时出错

时间:2014-03-28 06:41:18

标签: qt combobox

我使用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

2 个答案:

答案 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()没有导致错误。