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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QAbstractItemModel::setItemData проблема  (Прочитано 5649 раз)
asvil
Гость
« : Март 21, 2010, 18:21 »

Код:
bool QAbstractItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)
{
    bool b = true;
    for (QMap<int, QVariant>::ConstIterator it = roles.begin(); it != roles.end(); ++it)
        b = b && setData(index, it.value(), it.key());
    return b;
}

Qt 4.6.1
gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3

Допустим в QMap два элемента.
Допустим на первой итерации цикла setData возвращает false.
На второй итерации setData НЕ вызывается.
Это оптимизация gcc? А как ее отключить?
Я переопределил setItemData, но хотелось бы минимально вмешиваться в уже созданное в qt.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Март 21, 2010, 18:44 »

Код:
bool QAbstractItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)
{
    bool b = true;
    for (QMap<int, QVariant>::ConstIterator it = roles.begin(); it != roles.end(); ++it)
        b = b && setData(index, it.value(), it.key());
    return b;
}
setData не вызовется никогда если "b" уже true. Сначала язык, потом умные итераторы

Edit: правильно "setData не вызовется никогда если "b" уже false. То есть первый возврат setData = false делает дальнейшие проверки бессмысленными.
« Последнее редактирование: Март 21, 2010, 19:05 от Igors » Записан
BRE
Гость
« Ответ #2 : Март 21, 2010, 18:52 »

setData не вызовется никогда если "b" уже true. Сначала язык, потом умные итераторы
Почему?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Март 21, 2010, 18:52 »

>>Это оптимизация gcc?
скорее всего.
Попробуй поменять местами аргументы оператора "&&"
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Март 21, 2010, 18:53 »

>>если "b" уже true
наверное имелось в виду "false"
Записан

Юра.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Март 21, 2010, 19:06 »

Почему?
Спасибо, поправился  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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