Russian Qt Forum

Qt => Общие вопросы => Тема начата: OS2 от Декабрь 06, 2009, 13:23



Название: Досадная ошибка в Qt 4.6?
Отправлено: OS2 от Декабрь 06, 2009, 13:23
После перехода на Qt 4.6 for Windows (VS 2008) перестал приходить ItemPositionHasChanged в QGraphicsItem::itemChange().
Для краткости приведу пример из главы 8, книги Жасмина Бланшета "Qt 4: Программирование GUI на С++ Изд. 2-е": при постановке на сцену Нодов и связывания их линиями перестал обрабатывается ItemPositionHasChanged в Итемах, со всеми вытекающими... В 4.5.3 этот примет корректно работал, что случилось в 4.6 - мне не ясно, может у кого-нибудь есть мнение на этот счет?

ЗЫ: пример прилагается...


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: Rcus от Декабрь 06, 2009, 17:29
QGraphicsItem::ItemPositionHasChanged   9   The item's position has changed. This notification is sent if the ItemSendsGeometryChanges flag is enabled, and after the item's local position, relative to its parent, has changed. The value argument is the new position (the same as pos()), and QGraphicsItem ignores the return value for this notification (i.e., a read-only notification).
http://bugreports.qt.nokia.com/browse/QTBUG-5497


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: OS2 от Декабрь 06, 2009, 23:53
Очередной мину тролям...


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: SABROG от Декабрь 07, 2009, 00:14
Очередной мину тролям...

За что? Они отключили это оповещение, чтобы увеличить производительность потому, что большинству людей это сообщение не нужно. А то, что старые приложения перестают нормально работать после установки новых версий библиотек - так это нормально. У меня точно такая же история была с переходом с BCB6 на BDS2006. Пришлось программу переписывать, причем некоторый функционал пришлось вообще выкинуть из-за того, что в новой IDE просто тупо убрали компонент и не предоставили ничего нового взамен.


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: OS2 от Декабрь 07, 2009, 00:52
Не надо все идеализировать... На книге написано: "Официально одобрено компанией Trolltech" и это, по моему мнению, ко многому обязывает, если их примеры работы с ихний же библиотекой, перестают работать при переходе на новую версию, то это именно им, огромный миииинус....


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: pastor от Декабрь 07, 2009, 01:10
Несагласен.

Если бы этот "баг" появился бы при переходе с 4.5.2 на 4.5.3, то да. Но мы имеем изменнием минорной версии. Об изиенениях было заявлено в чендж логе:

Цитировать
****************************************************************************
* Important Behavior Changes *
****************************************************************************
d) QGraphicsItem no longer calls itemChange() for position and
      transformation changes. If you want to receive notifications for changes
      to the item's position and transformation, you can set the flag
      QGraphicsItem::ItemSendsGeometryChanges (which is enabled by default by
      QGraphicsWidget and QGraphicsProxyWidget).


Так что батенька вы неправы


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: niXman от Декабрь 07, 2009, 01:19
Цитировать
На книге написано: "Официально одобрено компанией Trolltech"
Книга для версии 4.6.0 ? - НЕТ!
Не бузи!


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: Alex Custov от Декабрь 07, 2009, 01:54
А то, что старые приложения перестают нормально работать после установки новых версий библиотек - так это нормально.

Это НЕ нормально во время смены минорной версии


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: lit-uriy от Декабрь 07, 2009, 04:15
минорная версия, предполагает совместимость с ранее выпущенными версиями, посему бага. Незадолго до выхода 4.6, троли делали рассылку с предложением проверить полностью работоспособность приложений после подмены двоичных библиотек на 4.6., и после перекомпиляции с 4.6.

Я свои програмулины потестил и отписал что у меня "full compatible''


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: crackedmind от Декабрь 07, 2009, 04:25
Кстати, раз пошла такая пьянка. То только у меня в асистенте кнопка "Домой" ничего не делает?


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: lit-uriy от Декабрь 07, 2009, 04:37
к стати, асистент в 4.6, глюкавит при переходе по из предметного указателя в якоря, во вкладках исчезает заголовок, и область просмотра (видимо QWebView), через пару сек. прокручивается самовольно в начало страницы

>>"Домой" ничего не делает?
у меня работает (её можно настроить)


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: SABROG от Декабрь 07, 2009, 15:27
Хорошо, помогите мне восполнить пробел в знаниях. Где можно почитать стандарт/соглашение/правила, в котором написано о том какие изменения можно делать в мажорных/минорных и т.п. версиях?


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: SimpleSunny от Декабрь 07, 2009, 15:41
Например тут (http://qt.gitorious.org/qt/pages/CodingConventions) (перевод http://translated.by/you/qt-coding-conventions/into-ru/)
Искать по словам "Binary and Source Compatibility" (Совместимость бинарных файлов и исходных кодов)


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: pastor от Декабрь 07, 2009, 15:59
Бинарная совместимость нарушена? - Нет
Совместимость на уровне исходного кода нарушена? - Нет
Important Behavior Changes в логе скрыли? - Нет

О чем речь?


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: SABROG от Декабрь 07, 2009, 16:28
Например тут (http://qt.gitorious.org/qt/pages/CodingConventions) (перевод http://translated.by/you/qt-coding-conventions/into-ru/)
Искать по словам "Binary and Source Compatibility" (Совместимость бинарных файлов и исходных кодов)

Вы забываете, что слово "keep" также переводится как: "придерживаться, соблюдать, поддерживать"

т.ч. здесь может и не быть строгого запрета. Вполне возможно, что речь идет о не злоупотреблении. Тем более, что в случае с изменением умалчиваемого значения параметра речь идет не о бинарной совместимости, т.к. прямого влияния нет, значит остается совместимость на уровне исходного кода. Но и тут тоже никакого влияния нет, т.к. компилятор новый код компилирует и библиотека сама по себе работает. Другое дело, что изменилось поведение, так оно меняется в каждом патче.


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: SimpleSunny от Декабрь 07, 2009, 16:33
Вы забываете, что слово "keep" также переводится как: "придерживаться, соблюдать, поддерживать"

Да я и в дискуссию не вступал, просто привел ссылки, вдруг кто не знает :)


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: Alex Custov от Декабрь 07, 2009, 21:56
Библиотека не должна менять своё поведение во время смены минорых версий. Иначе разработка преврватится в хаос #ifdef-ов. Я уже это встречал при работе с QScrollArea. Где это написано? Думаю нигде, это как правило хорошего тона. Подкладывание таких свиней во время смены минорных версий жутко бесит.


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: SABROG от Декабрь 07, 2009, 23:13
Как бы там ни было если взять любой старенький проект на Qt, то там всё пестрит подобным:

Код
C++ (Qt)
#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
 


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: Alex Custov от Декабрь 08, 2009, 00:25
Как бы там ни было если взять любой старенький проект на Qt, то там всё пестрит подобным:

Код
C++ (Qt)
#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 0))
 

Это смотря что следует далее. Может там испольуется класс или метод который только в 4.3 появился. Ещё бывает Qt класс работает неправильно в 4.3, а в 4.4 - правильно. Это уж бог ним, обернуть в #ifdef можно, рабочий момент так сказать.


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: pastor от Декабрь 08, 2009, 01:22
Где это написано?

В Changes в отдельном разделе.

Киньте в меня линком, где написано что недолжно меняться в минорном релизе в контексте Qt. Если такового нет, это превращается в холивар, и спор, как результат, бессмыслен. Ктомуже троли не усугубили производительность, а напротив - улучшили. И то что немного изменился функуионал, честно описано в логе, кто не читает - его проблемы.

ЗЫ: я не понимаю предмет спора в контексте перемены минорного релиза. Вот если было это в patch релизе, я бы молча согласился и принял как баг.

ЗЗЫ: Вы вот некотрые говорите "Qt класс работает неправильно в 4.3, а в 4.4 - правильно. Это уж бог ним, обернуть в #ifdef можно". А паршивая производительность это не баг? И что плохого что этот баг устранен? (покрайней мере произведена попытка улучшения)


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: Alex Custov от Декабрь 08, 2009, 03:23
В Changes в отдельном разделе.

Changes минует некоторое количество изменений. Например "Porting to Qt4" до сих пор неполон. Изменений по поводу QScrollArea я не видел, а они были. И узнавал я об этом только когда видел что программа перестала работать.

И то что немного изменился функуионал, честно описано в логе, кто не читает - его проблемы.

И пользователи тоже должны читать логи библиотек, когда делают aptitude update? Или программисты должны постоянно следить за минорными изменениями? И тут дело не в компиляции, API/ABI совместимости, а в том что такой баг можно будет поймать только во время полного тестирования программы, которое обычно не делают при смене минорной версии.

К тому же, почему опять же тема паршивой производительности пофиксена только в 4.6? Ну в 4.1, 4.2, бог с ним, пока устаканится переход на новую мажорную ветку... Но 4.6 ???


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: kamre от Декабрь 08, 2009, 16:15
И пользователи тоже должны читать логи библиотек, когда делают aptitude update?
А как же еще, конечно, должны. Тут два варианта - либо таскать проверенные библиотеки с собой как в винде, либо зависеть от системных и ловить глюки при их update. Вон недавно Opera с Qt 4.5.3 не работала в линуксе, или в куче приложений использующих GTK+ перестали кнопки нажиматься из-за изменений в GTK+ 2.18. Так что читайте change logs и тестируйте приложения с каждым апдейтом системных библиотек.


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: Alex Custov от Декабрь 08, 2009, 20:28
Вон недавно Opera с Qt 4.5.3 не работала в линуксе, или в куче приложений использующих GTK+ перестали кнопки нажиматься из-за изменений в GTK+ 2.18. Так что читайте change logs и тестируйте приложения с каждым апдейтом системных библиотек.

Если я правильно помню, Опера с Qt4 не имеет статуса стабильной. С GTK - я именно об этом и говорю, и Торвальдс если помните также неплохо посрался насчёт close(2). Библиотека не должна менять поведение в минорных версиях, а поведение - это торчащий наружу функционал (сигналы, визуальные изменения, вызовы виртуальных методов и т.д.). За подклыдывание таких сюрпризов с авторами нужно делать что-нибудь противоестественное.  ::)


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: OS2 от Декабрь 08, 2009, 22:24
Alex Custov
Согласен с тобой.


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: Dendy от Декабрь 09, 2009, 01:15
Согласен с Alex Custov. "Назвался груздём - полезай в кузов."

Не стоит забывать, что бинарная совместимость Qt - не самоцель, а всего-лишь инструмент. Заявленая бинарная совместимость преследует две цели:

1. Обновление шаровой библиотеки Qt для всей системы без обновления самих программ.
2. Ликвидирование Legacy-кода и бекпортирования.

Как видим, обновление Qt для всей системы невозможно, без ломания поведения самих программ. То что программа не крешится совсем не значит, что она работает как надо. Определить что сломалось можно только после выхода новой версии Qt, телепатов нет. Следовательно, ломая поведение библиотеки при смене версии катится коту под хвост первый пункт.

Теперь пункт второй, legacy-код. Как видим Trolltech добился своего - параллельные ветки Qt существуют только для экспериментов. Весь код в релизе сливается в один тег, после чего он не развивается самостоятельно. Никакого бекпортирования, никаких фиксов отдельно для старой версии и для новой - мажорная версия Qt является баг-фиксом к последней минорной. Так что забудьте про аргумент "Так это ведь они в мажорной версии что-то сменили, в мажорной-то можно" . У Qt нет отдельного багфикса к предыдущей минорной версии, им является следующая мажорная версия, эта схема была принята на этапе дизайна библиотеки. Следовательно сохранение поведения библиотеки обязано присутствовать не только между минорными версиями, но и между мажорными.

На вопрос, чем же вообще отличаются мажорные и минорные версии ответ прост: прямой бинарной совместимостью (forward binary compatibility). Когда программа, собранная с Qt 4.5.3 будет работать в системе у пользователя, где стоит Qt 4.5.0.


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: lit-uriy от Декабрь 09, 2009, 01:35
Dendy, небольшие коррективы к сказанному тобой, ты перепутал имена релизов:
"Мажорный", следует читать "минорный"
"Минорный" - "патч" (исправление)

Т.к. 4.5.3:
4 - Мажорная версия (ни о какой совместимости речь может вообще не идти)
5 - Минорная
3 - исправление

В остальном полностью с тобой солидарен.


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: Dendy от Декабрь 09, 2009, 01:38
Да, спасибо. Конечно же под мажорной версией имелась в виду вторая цифра, а под минорной - третья.


Название: Re: Досадная ошибка в Qt 4.6?
Отправлено: Dendy от Декабрь 09, 2009, 02:19
А теперь главный вопрос. Почему интернеты бурлят, но толку нет?

Для ответа прийдётся забраться ещё на ступеньку выше, чтобы вспомнить, что и Qt - не самоцель. Цель - задача, которую Qt помогает выполнить.

Под Windows никто не ориентируется на шаровые библиотеки Qt в системе, а ложат их прямо в пакет программы. Таким образом Qt обновляется вместе с самой программой и сюрприз от Троллей будет предупреждён зоркими глазами разработчика, вычитывающего ченжлог.

В Линуксе же обратная бинарная совместимость теоретически должна иметь плачевные последствия, ибо разработчик вынужден линковать программу к Qt*.so.4 без указания подверсии, которая может быть удалена в будущем. Держать на системе отдельно Qt 4.5 и Qt 4.6 технически можно, но этого никто не делает из-за отсутствия бекпорта с багфиксами. Но и здесь никто не рвёт волосы из-за сломаных программ. Мейнтейнеры дистрибутивов не набрасываются на свежий билд, а терпеливо ждут вестей с поля боя. А разработчики популярных программ - те и так впереди паровоза, уже давно оттестировали свои детища на релиз кандидатах и сборках с git.

Вот так семимильными шагами пишется библиотека, и взглянем правде в глаза - развивается достаточно живо. И надо отдать должное - багов могло бы быть на порядок больше. А те что есть - поправим по ходу дела. Все на броневичок!