Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Ошибка в QComboBox


Автор: OlegIT 7.2.2014, 08:38
Qt5.2 . «Вручную» создал комбобокс, свою модель не использую.

Код

    MyCombo = new QComboBox();
    QGraphicsScene *scene = new QGraphicsScene();
    scene->addWidget(…);
    scene->addWidget(MyCombo);
 


Нужно обновить в нём информацию. Предварительно вызываю:
Код

MyCombo->clear();

и получаю ошибку выполнения
Цитата

ASSERT failure in QList<T>::operator[]: "index out of range", file C:/Qt/Qt5.2.0/5.2.0/mingw48_32/include/QtCore/qlist.h, line 480
 

Та же ошибка возникает когда я поштучно удаляю строки, на последней удаляемой строке. Очистка пустого комбобокса ошибок не даёт.
Комбобоксы в диалоге работает без ошибок.
Где я ошибаюсь? 

Автор: ALEXRAGE 7.2.2014, 11:19
Скорее всего где-то происходит обращение к ComboBox по индексу элемента уже после очистки. Получается выход за пределы массива. Нужно проверить остальной код и там где происходит обращение к элементу поставить проверку, что индекс не больше количества элементов в данный момент.

Автор: OlegIT 7.2.2014, 12:33
Не вижу где это может быть. Свою модель не использую, используется по умолчанию внутренняя, так что с этой стороны проблем не должно быть. Элементы добавляю листом (MyCombo->addItems(QStringList)). Прохожу дебагером, дальше очистки MyCombo->clear(); или удаления элементов поштучно не иду, тут же ошибка.


Автор: ALEXRAGE 7.2.2014, 12:53
Цитата(OlegIT @  7.2.2014,  08:38 Найти цитируемый пост)
in QList<T>::operator[]: "index out of range"

Это говорит о том, что в какой-то момент произошел вызов элемента за пределами QList. Либо индекс меньше нуля, либо больше, чем count(). А вот где это присходит по тому куску кода, который вы привели, понять очень сложно.
Что там вообще происходит? Что за проект?

Автор: vinter 7.2.2014, 14:22
когда срабатывает assert, ты всегда может увидеть стек вызовов, который к нему привёл. Посмотри его и найдёшь ошибку.

Автор: OlegIT 7.2.2014, 15:26
Цитата(vinter @  7.2.2014,  14:22 Найти цитируемый пост)
Посмотри его и найдёшь ошибку. 

Спасибо, гляну.
Сделал тестовый проект обрезанием, оставил обвязку QGraphicsScene, комбобокс и кнопку очистить. Всё работает.

Автор: OlegIT 10.2.2014, 09:10
Цитата(vinter @  7.2.2014,  14:22 Найти цитируемый пост)
Посмотри его и найдёшь ошибку. 

Программа рушится так, что ни какого стека нет, дебагер тоже вылетает.
Прошу прощения, поторопился обратится за помощью. Наведённая ошибка была из-за не внимательности.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)