Bug 55739 - Switch to Qt6
Summary: Switch to Qt6
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: OpenBoard (show other bugs)
Version: unstable
Hardware: all Linux
: P5 enhancement
Assignee: neurofreak@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-08-27 14:32 MSK by Ivan A. Melnikov
Modified: 2025-11-10 12:12 MSK (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ivan A. Melnikov 2025-08-27 14:32:41 MSK
Апстрим рекомендует Qt6 начиная с 1.7.3[1]. Предлагаю подумать о переходе.

[1]https://git.altlinux.org/gears/O/OpenBoard.git?a=blob;f=README.md;h=cd8563ef982996c01571fc32f05f882550e95fad#l29
Comment 1 Антон Мидюков 2025-08-27 14:56:04 MSK
(Ответ для Ivan A. Melnikov на комментарий #0)
> Апстрим рекомендует Qt6 начиная с 1.7.3[1]. Предлагаю подумать о переходе.
> 
> [1]https://git.altlinux.org/gears/O/OpenBoard.git?a=blob;f=README.md;
> h=cd8563ef982996c01571fc32f05f882550e95fad#l29

Я уже пробовал. Пара патчей отваливается. Их нужно переписывать.
Comment 2 Ivan A. Melnikov 2025-08-27 16:18:20 MSK
> Пара патчей отваливается

Отваливается (точнее, мешает сборке) только 0006-polygon_line_styles.patch, из-за использования QStringRef. Его несложно допинать, на моей машине собралось такое:

https://git.altlinux.org/tasks/393374

Но вообще в этом патче странный код, неплохо бы посмотреть на него внимательнее.

Не понятно, что делает метод convertLineToPolygon. QPolygonF собирается в строку, а потом разбирается обратно в QPolygonF, при этом на первый взгляд он от этого не должен поменяется, только памяти немного утекает.

Что произойдёт, если заменить эту функцию на однострочник `return pLine;`? Как это увидеть?
Comment 3 Ivan A. Melnikov 2025-08-27 16:33:18 MSK
> https://git.altlinux.org/tasks/393374

Внезапно, i586 уже лишилось qt6-webengine, похоже из-за проблем node. qt5-webengine там кстати тоже в FTBFS.
Comment 4 Антон Мидюков 2025-08-27 18:47:30 MSK
(Ответ для Ivan A. Melnikov на комментарий #3)
> > https://git.altlinux.org/tasks/393374
> 
> Внезапно, i586 уже лишилось qt6-webengine, похоже из-за проблем node.
> qt5-webengine там кстати тоже в FTBFS.

Под i586 можно не собирать. Не проблема.
Comment 5 Ivan A. Melnikov 2025-08-28 13:19:19 MSK
Во-певрых, я вчера накосячил при переносе 0006-polygon_line_styles.patch, сегодня очевидная ошибка исправлена.

Во-вторых, эффект от convertLineToPolygon увидеть несложно: нужно нарисовать несколько пунктирных линий, а потом пробовать их стирать стёркой. Если convertLineToPolygon просто вернёт свой аргумент, то при работе стёрки иногда будут пропадать сегменты, расположенные вне области действия (возможно даже где-то очень далеко).

Как convertLineToPolygon решает эту проблему неясно, но очевидно, что происходит какая-то магия. Более того, при сборке с qt6 эта магия слегка подразваливается -- при определённом упорстве можно воспроизвести проблему, но не так легко и заметно, как было бы без convertLineToPolygon.

Природа этой магии не очевидна. По всей видимости, превращения float'ов в строчки и обратно как-то очень удачно их округляют. Попытки понять, как именно, и как-то воспроизвести эту магию более простыми действиями достаточно результата пока не дали, хотя обычное округление координат до 3-4 десятичных знаков делает проблему заметно реже воспоизводящейся.
Comment 6 Ivan A. Melnikov 2025-09-01 20:01:47 MSK
(In reply to Ivan A. Melnikov from comment #5)
> Природа этой магии не очевидна.

И понять её мне так и не удалось. К тому же, она начинает подводить при сборке с Qt6.

Вместо оживления магии можно попробовать сделать что-то более понятное. 

Суть проблемы в том, что стёрка вычетает один QPainterPath из другого, и алгоритм этого вычетания не справляется с полигонами, состоящими из нескольких не связанных друг с другом частей. Соответственно идея в том, чтобы не ставить перед ним таких сложных задач -- например, обрабатывать все чёрточки пунктироной линии по одной.

Однако сильно вмешиваться в код, апстрим которого не хочет принимать такие сложные изменения[1] наверное не стóит, так что была изобретена небольшая хитрость. Линии как и раньше добавляются в сцену целиком, и разделяются на цельные куски непосредственно при применении к ним стёрки. На моей машине работает хорошо:

https://git.altlinux.org/tasks/393758/

[1]https://github.com/OpenBoard-org/OpenBoard/pull/714#issuecomment-1533112260
Comment 7 Антон Мидюков 2025-11-08 20:33:18 MSK
Спасибо за патчи. Отправил в Сизиф.
Comment 8 Sergey V Turchin 2025-11-10 12:08:35 MSK
(Ответ для Ivan A. Melnikov на комментарий #3)
> Внезапно, i586 уже лишилось qt6-webengine, похоже из-за проблем node.
Нет. Из-за прекращения поддержки в Blink.
Патч для возвращения, кажется, ещё где-то есть, на я решил изначально не делать в Qt6, чтоб потом не мучиться с выпиливанием.
Comment 9 Sergey V Turchin 2025-11-10 12:12:39 MSK
(Ответ для Ivan A. Melnikov на комментарий #3)
> похоже из-за проблем node.
Эта решена #56065