Как избавиться от мерцания при анимации в Qt?

Надо сделать анимацию: заставить плавно переместиться виджет из одного положения в другое по прямой.
Использую QPropertyAnimation. С ее помощью двигаю свой виджет.
Код создания анимации
Node* a = new Node(this);
    a->show();
    QPropertyAnimation* anim = new QPropertyAnimation(a, "geometry", this);
    anim->setStartValue(QRect(0, 0, m_rectSize, m_rectSize));
    anim->setEndValue  (QRect(0, 250, m_rectSize, m_rectSize));
    anim->setDuration(500);
    anim->start(QPropertyAnimation::DeleteWhenStopped);

И отрисовка внтури Node. (ее часть)
void Node::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);

    int size = height();

    QRect currentRect(0, 0, size, size);
    painter.setPen  (m_color);
    painter.setBrush(m_color);
    painter.drawRoundedRect(currentRect, size/5, size/5);
}

Анимация работает. Но! Мерцает. Причем мерцания возникают только в тех частях Node, где есть скругления. Если скругления отключить, что все красиво и без лагов. Но отключать их нельзя.

Есть идеи, как это исправить?
Спасибо

UPD: можно добавить еще то, что при большой скорости анимации (100-200 мкс), т.е. при быстром движении квадратика, мерцает он уже весь.

UPD2: Windows 7 x64
  • Вопрос задан
  • 3793 просмотра
Решения вопроса 1
@danilevskiy
C++/Qt Developer
Делайте двойную буферизацию. Ваш виджет будет каждый раз перерисовываться при перемещении. Можете это проверить: добавьте вызов функции qDebug()<<__FUNCTION__ в onPaint и посмотрите в отладчик.
www.informit.com/articles/article.aspx?p=1405227&s...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BuriK666
@BuriK666
Компьютерный псих
Это похоже на баг Qt, попробуйте другую версию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы