Быстрое изменение яркости значка QPushButton
Я нашел функцию, делающую QImage ярче, и использовал ее в своем приложении Qt. Я хочу показать простую "анимацию", делающую кнопку шаг за шагом ярче, а затем снова шаг за шагом возвращаться в исходное состояние после того, как пользователь щелкнет по ней.
Вот мой код:
void Widget::on_stopButton_clicked(){
player.stop();
for(int i = 0; i <= 50; ++i){
QImage* image = new QImage(":/Graphics/Graphics/StopButton.png");
changeBrightness(*image, i);
QPixmap* pixmap = new QPixmap(QPixmap::fromImage(*image));
ui->stopButton->setIcon(QIcon(*pixmap));
QThread::msleep(50);
}
}
Это не работает, как я ожидал... Я вижу только конечный эффект, поэтому последний вызов: changeBrightness(*image, 50);
Кажется, что пользователь может видеть изменения в форме только после завершения функции, правильно? Есть ли другой способ сделать такую "анимацию"?
1 ответ
Вы не даете Qt время перерисовывать виджет после обновления изображения кнопки, потому что вы застряли в цикле. Только после того, как вы закончите обновление изображения, Qt сможет перерисовать ваш виджет, поэтому вы видите только конечный результат.
Посмотрите в QTimer. Вы можете установить его таймаут на 50 миллисекунд через QTimer::setInterval. Затем подключите слот, который меняет цвет изображения кнопки на QTimer:: timeout. Этот слот будет очень похож на ваш код, но без цикла. Например, каждый вызов слота - это отдельная итерация вашего цикла. Наконец, чтобы запустить или остановить анимацию, вы вызываете QTimer:: start или QTimer:: stop.