LINUX.ORG.RU

QSvgWidget криво отрисовывает анимацию, не могу понять где

 


0

3

Здравствуйте увадажаемые форумчане!

Мучаю QSvgWidget на Qt. Надо сделать крутящийся элемент (ожидание).

Вижу , что крутит но ось смещена куда-то влево.

Вот код:

    QIcon icon(":eqpt/waiting/spinner0.gif");

    //        QSvgRenderer * svg_renderer = new QSvgRenderer( QString(":view/img/checked.svg") , this);
    //        QSvgRenderer * svg_renderer = new QSvgRenderer( QString(":eqpt/check-disabled.svg") , this);

    QpSvgWidget *svg0 = new QpSvgWidget( this );
    svg0->load( QString(":eqpt/waiting/spinner1.svg") );
    svg0->setBaseSize( QSize( 200, 200 ));


    QpSvgWidget *svg1 = new QpSvgWidget( this );
    svg1->setBaseSize( QSize( 200, 200 ));
    svg1->setMinimumSize( 200 , 200 );
    svg1->setMaximumSize( 200 , 200 );
    svg1->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed);
    svg1->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed);

    svg1->load( QString(":eqpt/waiting/spinner1.svg") );

    svg1->setAutoFillBackground(false);

    ui->vl_0->addWidget( svg0 );
    ui->vl_4->addWidget( svg1 );

Вот сам svg:

<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'>

<radialGradient id='a11' cx='.66' fx='.66' cy='.3125' fy='.3125' gradientTransform='scale(1.5)'>
	<stop offset='0' stop-color='#1302DC'></stop><stop offset='.3' stop-color='#1302DC' stop-opacity='.9'></stop>
	<stop offset='.6' stop-color='#1302DC' stop-opacity='.6'></stop>
	<stop offset='.8' stop-color='#1302DC' stop-opacity='.3'></stop>
	<stop offset='1' stop-color='#1302DC' stop-opacity='0'></stop>
</radialGradient>

<circle transform-origin='center' fill='none' stroke='url(#a11)' stroke-width='15' stroke-linecap='round' stroke-dasharray='100 500' stroke-dashoffset='0' cx='50' cy='50' r='40'>

<animateTransform type='rotate' attributeName='transform' calcMode='spline' dur='2' values='360;0' keyTimes='0;1' keySplines='0 0 1 1' repeatCount='indefinite'>
</animateTransform>

</circle>

<circle transform-origin='center' fill='none' opacity='.2' stroke='#222222' stroke-width='15' stroke-linecap='round' cx='50' cy='50' r='40'></circle>
</svg>

в браузере картинка крутится правильно, но мне надо в Qt 4, а тут нижний circle (который стоит на месте) - располагается правильно, а вот animateTransform крутится вокруг оси, которая как-то смещена влево и вверх (похоже ось на 0,0 координатах).

Может кто скажет как решить проблему? Какой класс переопределить и т.д.

Как видео прикрепить не понял пока.



Последнее исправление: kkmspb (всего исправлений: 4)

но мне надо в Qt 4

как решить проблему

перейти на Qt3, очевидно…

ладно, по-серьёзному:

отрендерить в gif и показывать через QMovie. Qt4 давно не поддерживается и что-то там пофиксить будет крайне проблематично.

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)
Ответ на: комментарий от anonymous
  1. Анонимус, спасибо за каст.
  2. Лично знаю людей, которые пишут и поддерживают код (проприетарный) на Qt 4.8 в 2025 году, причём им платят за это деньги. Да, это делается не для современных систем, но системы эти пока вполне живые.
  3. Меня всегда веселит, когда к программам начинают подходить с антропоморфными мерками: «насиловать труп» и вот это вот всё. ПО с кодом, открытым под свободной лицензией, убить почти невозможно. Оно живо, пока его есть под чем компилировать и есть кому патчить.
  4. (ГЛАВНОЕ) Есть огромное количество кода, которое будет прекрасно собираться и в Qt4, и в Qt5, и в Qt6. Кое-где потребуется условная компиляция. Например, так написан редактор TEA Петра Семилетова aka @roxton. Мой известный в узких кругах Pet project тоже собирается под тремя версиями, правда для полноценной работы под Qt6 ещё нет, будет, когда я пошатаю их QTextEncoder. И подозреваю, что классы, которые ТС выкладывает на ЛОРе, с очень большой вероятностью соберутся под современными версиями Qt «из коробки» либо с минимальным допиливанием. Есть, безусловно, исключения: если человек в Qt4 использовал QtWebKit или QtMultimedia, будет больно. QML в Qt4 вообще был в зачаточном виде, но мы обсуждаем не его.

Зачем этим заниматься в опенсорсе? Могут быть разные резоны, например, моя программа, статически собранная под Qt4, занимает 10 мегабайт, под Qt5 уже 20, под шестёрку пока не смотрел. Для кого-то разница может быть критичной. Хотя свой новый проект для опенсорса я пишу уже сразу под Qt 5, под шестёркой тоже буду тестировать.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от hobbit

Лично знаю людей, которые пишут и поддерживают код (проприетарный) на Qt 4.8 в 2025 году, причём им платят за это деньги

Поддерживаю (как могу) код на кутетри в 2025 году.

Хочу ли я об этом рассказывать? Нет. Буду ли использовать это как оправдание использования отмерших технологий? Тоже нет.

Таки дела.

aol ★★★★★
()
Ответ на: комментарий от hobbit

ПО с кодом, открытым под свободной лицензией, убить почти невозможно

Ну вот что-то подобное в данным момент квиры-за-ХАМАС из GONOME FOUNDATION пытаются провернуть с ксоргом.

thunar ★★★★★
()
Ответ на: комментарий от hobbit

Зачем этим заниматься в опенсорсе?

ТС продает свою программу для Windows. Исходники закрыты. Скорее всего у него есть коммерческая лицензия для Qt4, вот и сидит на ней. Так что опенсорц тут мимо и Линукс тоже; тему можно удалять, а ТС банить.

anonymous
()
Ответ на: комментарий от aol

отрендерить в gif и показывать через QMovie

Спасибо за совет, видел в интернете пример похожий.

У себя все-таки добился нормальной отрисовки в Qt4: Вот такой вариант заработал:

<svg xmlns='http://www.w3.org/2000/svg'  width='100' height='100' viewBox='0 0 100 100'>

<radialGradient id='a11' cx='.66' fx='.66' cy='.3125' fy='.3125' gradientTransform='scale(1.5)'>
	<stop offset='0' stop-color='#1302DC'></stop><stop offset='.3' stop-color='#1302DC' stop-opacity='.9'></stop>
	<stop offset='.6' stop-color='#1302DC' stop-opacity='.6'></stop>
	<stop offset='.8' stop-color='#1302DC' stop-opacity='.3'></stop>
	<stop offset='1' stop-color='#1302DC' stop-opacity='0'></stop>
</radialGradient>

<circle transform-origin='center center' fill='none' stroke='url(#a11)' stroke-width='15' stroke-linecap='round' stroke-dasharray='100 500' 
 cx='50' cy='50' r='40'>

<animateTransform type='rotate' attributeName='transform' dur='5s' repeatCount='indefinite' attributeType="xml" from='360 50 50' to='0 50 50' >
</animateTransform>

</circle>

<circle transform-origin='center center' fill='none' opacity='.2' stroke='#1302DC' stroke-width='15' stroke-linecap='round' cx='50' cy='50' r='40'></circle>
</svg>

При этом в браузере стало криво работать. Вот такие вот дела. По хорошему надо бы править исходники Qt, но лень, сначала надо разбираться с отрисовкой на нижнем уровне, а это задачка не на пару дней. В общем кое-как заработало.

kkmspb
() автор топика
Последнее исправление: kkmspb (всего исправлений: 1)
Ответ на: комментарий от anonymous

Скорее всего у него есть коммерческая лицензия для Qt4,

Интересно стало , а сколько коммерческая лицензия стоит (по минимуму)? Я догадываюсь, что мне легче свой фреймворк написать на с++.

kkmspb
() автор топика
Ответ на: комментарий от kkmspb

Интересно стало , а сколько коммерческая лицензия стоит?

То есть ты пользуешься Qt на условиях GPL? Я скачал твою программу «БИТ драйвер ККТ» и требую ее исходные коды.

anonymous
()
Ответ на: комментарий от aol

Подскажу одно слово: copperspice

Спасибо, похоже на альтернативу Qt.

LGPL. Интересно там коммерческие лицензии платные тоже есть как в Qt? Или фулл фри?

kkmspb
() автор топика
Последнее исправление: kkmspb (всего исправлений: 1)
Ответ на: комментарий от aol

Меня на самом деле больше интересовало кто и за сколько реально покупал за свои кровные себе коммерческую лицензию Qt?

kkmspb
() автор топика
Последнее исправление: kkmspb (всего исправлений: 2)
Ответ на: комментарий от aol

Подскажу одно слово: copperspice

В первый раз его вижу.

  • Reflection (run time and compile time)
    • No Meta-Object Compiler is required for generating meta data, all references were removed
    • The functionality provided by moc was replaced with compile time templates
  • Enhanced Functionality
    • CopperSpice makes extensive use of modern C++ features
    • constexpr, lambda expressions, templates, variadic templates, template variables move semantics, structured bindings, tuple, decltype, SFINAE, and type traits
    • Redesigned all container classes to use the C++ standard library containers, iterators, and algorithms
    • Platform independent plugin system based on standard C++
  • Integration of CsString
    • Improved storage to properly represent Unicode strings
    • QString8 (UTF-8) and QString16 (UTF-16) classes
    • Added QStringView, QStringParser, and QRegularExpression

Звучит интересно.

Dr64h ★★★
()
Ответ на: комментарий от Dr64h

Это форк куте4 во времена, когда ещё можно было форкнуть. И дальнейшая разработка этого форка в виде отказа от moc.

Компиляется, правда, адово долго, оно и понятно - нужно все 100500 вариантов шаблонов развернуть..

aol ★★★★★
()