Russian Qt Forum

Qt => Model-View (MV) => Тема начата: vregess от Июнь 17, 2007, 10:22



Название: Qt 4.1.3 linux проблемы с делегатами
Отправлено: 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


Название: Qt 4.1.3 linux проблемы с делегатами
Отправлено: vaprele07 от Июнь 17, 2007, 15:07
Значит не валидный, мало ты там чего написал
пробуй мягче проверять if (!index.isValid()) return;
по сути на все что творится после void setModelData() const тебе...
а потом смотри выше где что не так... или кидай сюда подробности реализации


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

Да вот ничего не понял... выше - это только в модели, так получается, где смотреть?
ифом проверял - не валидный (Q_ASSERT обдно и то же, кстати...). интересно, почему в виндах этот код работает...


Название: Qt 4.1.3 linux проблемы с делегатами
Отправлено: vaprele07 от Июнь 18, 2007, 02:05
Q_ASSERT вызывает qFatal которая в свою очередь делает аборт приложению.
компиляция с флагом: QT_NO_DEBUG приводит к игнорированию Q_ASSERT(index.isValid());
например если ты в винде собирал как релиз а не дебак, скорее всего так и было. А в линухе собрал как дебаг вот она у тебя и вылетает. Q_ASSERT() используют в тех случаях, где тебе  стопудово нужно отловить ошибку которая в дальнейшем может привести к краху твоего приложения. Вот ты ее и поймал ;)
Выше это по коду ;) везде где идет работа с индексами их количеством например:
 rowCount,  columnCount ...


Название: Qt 4.1.3 linux проблемы с делегатами
Отправлено: vregess от Июнь 18, 2007, 06:54
Цитата: "vaprele07"
Q_ASSERT вызывает qFatal которая в свою очередь делает аборт приложению.
компиляция с флагом: QT_NO_DEBUG приводит к игнорированию Q_ASSERT(index.isValid());
например если ты в винде собирал как релиз а не дебак, скорее всего так и было. А в линухе собрал как дебаг вот она у тебя и вылетает. Q_ASSERT() используют в тех случаях, где тебе  стопудово нужно отловить ошибку которая в дальнейшем может привести к краху твоего приложения. Вот ты ее и поймал ;)
Выше это по коду ;) везде где идет работа с индексами их количеством например:
 rowCount,  columnCount ...


Спасибо за вводную статью про Q_ASSERT, я как-то особо не задумывался, что там внутри. Проги обе собирал, как ты говоришь, дебак, тк, вроде, трезвый был.
Но если даже и релиз.
Программа бы упала из-за невалидного индекса.
Но под виндой все корректно работает, те там индекс передается верный.
Я прям не знаю, куда сунуться...


Название: Qt 4.1.3 linux проблемы с делегатами
Отправлено: vregess от Июнь 19, 2007, 06:20
скачал qt-4.2.3 под линукс - проблема исчезла.