У меня проблема с созданием простой анимации с помощью анимации Qt.
У меня есть маленькое изображение, расположенное в правом нижнем углу экрана, я пытаюсь создать анимацию, которая увеличит изображение, вытянув его из верхнего левого угла изображения и вытянув его к центру экрана.
Мне удалось это сделать, но очень примечательно, что qanimation заставляет его мерцать (правая граница картинки, и она не получается хорошей)
Я также сделал это без анимации, но с таймером и изменением геометрии окна, но у меня была та же проблема, кажется, что она не обновляется достаточно быстро, создавая мерцание в правой границе изображения.
вот 2 примера:
1 - использование свойства анимации (геометрия)
animation = new QPropertyAnimation(this, "geometry");
animation->setDuration(555);
animation->setEasingCurve(QEasingCurve::Linear);
animation->setStartValue(QRect(availableScreenSize.width() -minWidth
-WINDOW_PADDING,availableScreenSize.height() - minHeight
-WINDOW_PADDING,minWidth,minHeight));
animation->setEndValue(QRect(availableScreenSize.width() - maxWidth
-WINDOW_PADDING,availableScreenSize.height() - maxHeight
-WINDOW_PADDING,maxWidth,maxHeight));
2 - с использованием таймера
#include "widget.h"
#include "ui_widget.h"
#include <QDesktopWidget>
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setStyleSheet("background:transparent;");
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint
| Qt::Tool);
availableScreenSize = qApp->desktop()->availableGeometry();
//Growing from right to left
this->setGeometry(availableScreenSize.width() - 165,
availableScreenSize.height()-95,160,90);
//Growing from left to right
//this->setGeometry(200,200,160,90);
timeLine = new QTimeLine();
timeLine->setDuration(2222);
timeLine->setFrameRange(1, 800);
connect(timeLine, SIGNAL(frameChanged(int)), this, SLOT(update()));
counter = 0;
timeLine->start();
}
Widget::~Widget()
{
delete ui;
}
void Widget: aintEvent(QPaintEvent * /* event */)
{
counter++;
qDebug() << counter;
qApp->processEvents();
//Growing from right to left
this->setGeometry(availableScreenSize.width() -165
- this->width()-1,availableScreenSize.height() - 95
- this->height()-1,this->width()+1,this->height()+1);
//Growing from left to right
//this->setGeometry(200,200,this->width()+1,this->height()+1);
if(timeLine->currentFrame() == 800)
{
qApp->exit(1);
}
}
Теперь утомленная вещь в том, что если анимация слева направо 2 - она выглядит плавной ... после изменения направления справа налево 2 вся правая граница становится «скачкообразной».
Я буду признателен за любую помощь, которую вы можете оказать мне.
Спасибо!