Russian Qt Forum
Сентябрь 30, 2024, 08:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: очистка QComboBox  (Прочитано 5266 раз)
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« : Февраль 02, 2010, 07:55 »

Qt 4.3.2
имеется форма, на ней несколько ComboBox'ов, которые заполняются при открытии формы из MySQL-таблиц абсолютно одинаково:
Цитировать
    tmpstr="SELECT * FROM obtype ORDER BY tnam";
    qry->exec(tmpstr);
    while(qry->next())
    {
        vtype<<qry->value(0).toInt();
        ui->CBType->addItem(qry->value(1).toString());
    }
    tmpstr="SELECT * FROM kabs ORDER BY knam";
    qry->exec(tmpstr);
    while(qry->next())
    {
        vkab<<qry->value(0).toInt();
        ui->CBKab->addItem(qry->value(1).toString());
    }

время от времени содержимое исходных таблиц меняется и надо перезаполнять ComboBox'ы. Опять одинаково-сначала они очищаются, потом как при запуске формы. Так вот: все очищаются нормально, а при попытке очистить CBKab вылазит сообщение
Цитировать
ASSERT failure in QVector<T>::operator[]: "index out of range", file /usr/include/qt4/QtCore/qvector.h, line 319

и программа закрывается. При этом перед очисткой проверяю- qDebug()<<"CBKab: "<<ui->CBKab->count(); выдает, что Combo не пустой (да это и так видно).
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #1 : Февраль 02, 2010, 07:57 »

Извиняюсь-вопрос то не задал: из-за чего такое может происходить? И как с ним бороться?
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
voronElf
Гость
« Ответ #2 : Февраль 02, 2010, 08:31 »

у тебя комбобоксы сигналами не связаны ? (насчет изменения текущего выделения и чего-нить в этом стиле). Проверь, чтобы при очистке не вызывались слоты, которые будут обращаться к уже пустым данным. Я частенько на такое попадаюсь при сложном интерфейсе.

PS: я так понял vtype и klab это векторы, в которых лежать id-шники таблиц. Почему бы не хранить эти данные в комбобоксе как Qt::UserRole (избавит от синхронизации векторов и комбобоксов) ?
Записан
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #3 : Февраль 02, 2010, 08:56 »

СПАСИБО! Точно, CBKab упоминался еще в одном слоте-это его и губило. А можно чуть поподробнее про то, как занести данные в UserRole? А то сейчас одним глазом глянул в Assistant, а там только получение значения из UserRole увидел.
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
Akaiten
Гость
« Ответ #4 : Февраль 02, 2010, 09:42 »

А можно чуть поподробнее про то, как занести данные в UserRole?

См. последний параметр метода addItem():
Код
C++ (Qt)
ui->CBType->addItem(qry->value(1).toString(), qry->value(0).toInt());
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.193 секунд. Запросов: 23.