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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.1.3 linux проблемы с делегатами  (Прочитано 5433 раз)
vregess
Гость
« : Июнь 17, 2007, 10:22 »

Под виндой все работает (там qt 4.2), а под лин ( qt 4.1.3) - нет.
Программа сыпется в
Код:

void DelegateContainer::setModelData(QWidget *editor,  
                                     QAbstractItemModel *model,
                                     const QModelIndex &index) const
{
  Q_ASSERT(index.isValid());
}


Т.е. индекс не валидный. Проверял индексы в модели в методе index().
Там вроде все нормально.
И почему в виндах работает, а тут - нет. В чем может быть проблема?

Windoxs XP qt-4.2.2-opensource, mingw
Linux Debian Sarge 3.1 qt-4.1.3
Записан
vaprele07
Гость
« Ответ #1 : Июнь 17, 2007, 15:07 »

Значит не валидный, мало ты там чего написал
пробуй мягче проверять if (!index.isValid()) return;
по сути на все что творится после void setModelData() const тебе...
а потом смотри выше где что не так... или кидай сюда подробности реализации
Записан
vregess
Гость
« Ответ #2 : Июнь 17, 2007, 18:48 »

Цитата: "vaprele07"
Значит не валидный, мало ты там чего написал
пробуй мягче проверять if (!index.isValid()) return;
по сути на все что творится после void setModelData() const тебе...
а потом смотри выше где что не так... или кидай сюда подробности реализации

Да вот ничего не понял... выше - это только в модели, так получается, где смотреть?
ифом проверял - не валидный (Q_ASSERT обдно и то же, кстати...). интересно, почему в виндах этот код работает...
Записан
vaprele07
Гость
« Ответ #3 : Июнь 18, 2007, 02:05 »

Q_ASSERT вызывает qFatal которая в свою очередь делает аборт приложению.
компиляция с флагом: QT_NO_DEBUG приводит к игнорированию Q_ASSERT(index.isValid());
например если ты в винде собирал как релиз а не дебак, скорее всего так и было. А в линухе собрал как дебаг вот она у тебя и вылетает. Q_ASSERT() используют в тех случаях, где тебе  стопудово нужно отловить ошибку которая в дальнейшем может привести к краху твоего приложения. Вот ты ее и поймал Подмигивающий
Выше это по коду Подмигивающий везде где идет работа с индексами их количеством например:
 rowCount,  columnCount ...
Записан
vregess
Гость
« Ответ #4 : Июнь 18, 2007, 06:54 »

Цитата: "vaprele07"
Q_ASSERT вызывает qFatal которая в свою очередь делает аборт приложению.
компиляция с флагом: QT_NO_DEBUG приводит к игнорированию Q_ASSERT(index.isValid());
например если ты в винде собирал как релиз а не дебак, скорее всего так и было. А в линухе собрал как дебаг вот она у тебя и вылетает. Q_ASSERT() используют в тех случаях, где тебе  стопудово нужно отловить ошибку которая в дальнейшем может привести к краху твоего приложения. Вот ты ее и поймал Подмигивающий
Выше это по коду Подмигивающий везде где идет работа с индексами их количеством например:
 rowCount,  columnCount ...


Спасибо за вводную статью про Q_ASSERT, я как-то особо не задумывался, что там внутри. Проги обе собирал, как ты говоришь, дебак, тк, вроде, трезвый был.
Но если даже и релиз.
Программа бы упала из-за невалидного индекса.
Но под виндой все корректно работает, те там индекс передается верный.
Я прям не знаю, куда сунуться...
Записан
vregess
Гость
« Ответ #5 : Июнь 19, 2007, 06:20 »

скачал qt-4.2.3 под линукс - проблема исчезла.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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