LINUX.ORG.RU

Набор изображений + QImage

sambist ★★
()

Рисуешь шейп (QPainterPath) и заливаешь коническим градиентом (QConicalGradient), угол которого изменяешь с помощью QPropertyAnimation.

Amp ★★★
()
Последнее исправление: Amp (всего исправлений: 1)

Если в лоб, то рисуй картинку и используй RotationAnimation

Или математику в руки, канвас на шею и с песней.

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

Анонимус дело говорит.

Либо вращай картинку через QPropertyAnimation (придётся унаследовать и сделать Q_PROPERTY, вызов set на которую будет давать вызов на transformed).

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

Кстати, да тема.

рисуешь 2 круглых квадрата (радиус=ширина/2) с разной шириной и заливаешь коническим градиентом с анимацией.

PS может и одного хватит, если ширину бордера можно указать.

habamax ★★★
()

Джве минуты в paintQt Creator'е:

vertelnapalke.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    qreal a;
    ~Widget();

protected:
    void paintEvent(QPaintEvent *);
    void timerEvent(QTimerEvent *);
};

#endif // WIDGET_H

vertelnapalke.cpp:

#include "Widget.h"
#include <QPainter>
#include <QDebug>
#include <QColorGroup>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    a = 0;

    setFixedSize(200, 200);

    startTimer(10);
}

void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);

    const QRectF bounds(0, 0, width(), height());
    painter.setPen(Qt::NoPen);
    painter.setBrush(QColor(64, 187, 231));
    painter.drawEllipse(bounds);

    QPen pen;
    pen.setCapStyle(Qt::RoundCap);
    pen.setWidth(20);

    QLinearGradient gradient;
    gradient.setStart(width(), height());
    gradient.setFinalStop(width() / 4, height() / 4);
    gradient.setColorAt(0, QColor(64, 187, 231));
    gradient.setColorAt(1, QColor(255, 255, 255));

    QBrush brush(gradient);
    pen.setBrush(brush);
    painter.setPen(pen);

    QRectF rect = QRectF(20, 20, width() - 40, height() - 40);
    painter.drawArc(rect, 90 * 16 + a, 0.65 * -360 * 16);
}

void Widget::timerEvent(QTimerEvent *)
{
    a-=100;
    update();
}

Widget::~Widget()
{

}

EXL ★★★★★
()

Анимация будет жрать процессор. Лучше набор картинок.

crowbar
()

Image { source: «krutilka.png»

RotationAnimator on rotation {

running: true loops: Animation.Infinite from: 0 to: 360 duration: 3000 } }

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

Так это же примитивами, а не картинкой. Сомневаюсь, что у автора QML-приложение. Думаю, оно на виджетах.

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

Не спорю. Для создания анимаций, как на картинке у TC - самое то использовать именно QML.

EXL ★★★★★
()

gif и QMovie же

Код прямо из документации.

QLabel label;
QMovie *movie = new QMovie("animations/fire.gif");

label.setMovie(movie);
movie->start();
grondek
()
Ответ на: комментарий от grondek

Гиф будет рваным, и его еще кто-то должен будет нарисовать. И стопицот раз перерисовать, если какой то параметр поменять захочется.

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

А если нужно нарисовать в точности такую же загогулину как у ТС на картинке с возможностью менять цвет/размер/толщину, во сколько строчек на qml это выльется? У меня ощущение, что без использования Canvas там такого не сделать. Как сложный shape нарисовать в qml, если из коробки он поддерживает только Rectangle со скруглениями? (базовые градиенты кстати, как я вижу, появились совсем недавно, в версии 5.3). Вот анонимус выше давал ссылку типа на qml, но по факту там просто обвязка над кучей плюсового кода. Кто-нибудь пусть расскажет, как просто и элегантно такие штуки реализуются на qml. Любопытно.

Ну а использование Canvas, как вы сами понимаете, выливается в примерно тот же объем кода, как если бы мы писали QWidget с кастомной отрисовкой на paintEvent

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

Только вот канвас постоянно перерисовывать не нужно, только крутить. А если движение посложнее, то вообще хоть вешайся... Недавно как раз на qml писал элемент-вентиллятор. С размытием вращения, разгоном-торможением и стробоскопическим эффектом. На крестах кода вышло бы больше раз в 10, как минимум...

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

Ой ёй ёй, какой тут холивар уже. Всем спасибо за кучу советов и за примеры. Попробую воспользоваться примером и посмотрю как жрет проц все это дело. А с QML дел не имел, как то руки не дошли, теперь действительно появился повод его пощупать. О результатах отпишусь

sudo cast energyclab

energyclab
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.