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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление QChekBox из QMap  (Прочитано 3837 раз)
Trademaster
Гость
« : Октябрь 27, 2013, 23:55 »

Всем привет Улыбающийся
Есть QMap<int,QCheckBox *> cb
Это сборник чекбоксов ,они размещеные в QTableWidget.
В проге есть возможность выделить все чекбоксы и снять выделение со всех чекбоксов (реализовано простыми циклами, кол-во чекбоксов хранится в перменной id ,она прибавляется на 1 с созданием каждой новой строки).
Так вот ,если я удалю строку с чекбоксом ,который находится в середине cb (предположим id = 10 , а я удалю строку с 5м чекбоксом)
 ,то при попытки выделить \ снять выделение со всех чекбоксов ,прога крашится (ясно почему ,т.к она пытается что то сделать с несуществующем чекбоксом).
Так вот ,нужно каким то образом это исправить,есть какие то идеи???
Записан
carrygun
Гость
« Ответ #1 : Октябрь 28, 2013, 05:21 »

Не очень понятно как у тебя связано ключ-значение. Но в чем сложность удалить из мапа? Сделай remove по ключу.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Октябрь 28, 2013, 10:55 »

Зачем такие трудности? Создайте свою модель. Раньше тоже так делал, но данный подход неверен и громоздок, чреват как раз такими ошибками.
Записан
Trademaster
Гость
« Ответ #3 : Октябрь 29, 2013, 09:39 »

Не очень понятно как у тебя связано ключ-значение. Но в чем сложность удалить из мапа? Сделай remove по ключу.
Сделаю remove по ключу и когда к этому же ключу прога обратиться ,она закрашится ,в этом и проблема...
А если юзать try ... catch Непонимающий
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Октябрь 29, 2013, 11:14 »

при обращении по ключу проверяй чтобы результат != 0

а как ты пробегаешься по всем чекбоксам — крутишь в форе числа от 0 до n что ли? может проще пробегаться прямо по QMap?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Maestro
Гость
« Ответ #5 : Октябрь 30, 2013, 02:24 »

Пользуйтесь моделями - они позволяют хранить внутри таблицы все необходимое.
Код:
#define MY_SUPER_ROLE     Qt::UserRole+1
QTableWidgetItem * twi;// откуда-то пришел ( из цикла, выделения, сигнала, etc.)
someMyObjectType someMyObject;

//сохраняем
QVariant  value(someMyObject);
twi->setData(MY_SUPER_ROLE, value);  
//или очищаем
twi->setData(MY_SUPER_ROLE, QVariant());
//читаем
QVariant var = twi->data(MY_SUPER_ROLE);
if(var.canConvert<someMyObjectType>()){
        someMyObjectType someMyObject = var.value<someMyObjectType>();
}
« Последнее редактирование: Октябрь 30, 2013, 02:52 от Maestro » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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