Russian Qt Forum

Qt => Общие вопросы => Тема начата: Trademaster от Октябрь 27, 2013, 23:55



Название: Удаление QChekBox из QMap
Отправлено: Trademaster от Октябрь 27, 2013, 23:55
Всем привет :)
Есть QMap<int,QCheckBox *> cb
Это сборник чекбоксов ,они размещеные в QTableWidget.
В проге есть возможность выделить все чекбоксы и снять выделение со всех чекбоксов (реализовано простыми циклами, кол-во чекбоксов хранится в перменной id ,она прибавляется на 1 с созданием каждой новой строки).
Так вот ,если я удалю строку с чекбоксом ,который находится в середине cb (предположим id = 10 , а я удалю строку с 5м чекбоксом)
 ,то при попытки выделить \ снять выделение со всех чекбоксов ,прога крашится (ясно почему ,т.к она пытается что то сделать с несуществующем чекбоксом).
Так вот ,нужно каким то образом это исправить,есть какие то идеи???


Название: Re: Удаление QChekBox из QMap
Отправлено: carrygun от Октябрь 28, 2013, 05:21
Не очень понятно как у тебя связано ключ-значение. Но в чем сложность удалить из мапа? Сделай remove по ключу.


Название: Re: Удаление QChekBox из QMap
Отправлено: Fregloin от Октябрь 28, 2013, 10:55
Зачем такие трудности? Создайте свою модель. Раньше тоже так делал, но данный подход неверен и громоздок, чреват как раз такими ошибками.


Название: Re: Удаление QChekBox из QMap
Отправлено: Trademaster от Октябрь 29, 2013, 09:39
Не очень понятно как у тебя связано ключ-значение. Но в чем сложность удалить из мапа? Сделай remove по ключу.
Сделаю remove по ключу и когда к этому же ключу прога обратиться ,она закрашится ,в этом и проблема...
А если юзать try ... catch ???


Название: Re: Удаление QChekBox из QMap
Отправлено: kambala от Октябрь 29, 2013, 11:14
при обращении по ключу проверяй чтобы результат != 0

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


Название: Re: Удаление QChekBox из QMap
Отправлено: Maestro от Октябрь 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>();
}