Qt loading 样式 图片旋转
图片旋转可以使用paintevent时间,也可以使用过滤器实现。如下为使用过滤器的方式实现图片旋转。
- 首先在 UI 中绘制 一个 QLabel 用于承载旋转图片。
- 然后给载体安装过滤器事件,保证其可触发的状态
1
| ui->labelLoadIcon->installEventFilter(this);
|
- 写过滤器要实现的功能,旋转
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| bool QAuthInit::eventFilter(QObject* watched, QEvent* event) { if (watched == ui->labelLoadIcon && event->type() == QEvent::Paint && !this->parentWidget()->isHidden()) { QImage loading = QImage(":/loading.jpg"); QPainter painter_inner(ui->labelLoadIcon); painter_inner.setPen(Qt::NoPen); painter_inner.setBrush(Qt::NoBrush); painter_inner.setRenderHint(QPainter::SmoothPixmapTransform); painter_inner.translate(loading.width() / qreal(2) + 0, loading.height() / qreal(2) + 0); painter_inner.rotate(-m_nAngle_ring); painter_inner.translate(-(loading.width() / qreal(2) + 0), -(loading.height() / qreal(2) + 0)); painter_inner.drawImage(QPointF(0, 0), loading); }
return QWidget::eventFilter(watched, event); }
|
- 定时调用,使过滤器中旋转的角度变化,从而达到旋转的效果
1 2 3 4 5 6 7
| QTimer* timerLoading = new QTimer(this);
timerLoading->setInterval(5);
connect(timerLoading, &QTimer::timeout, this, &LoadingWidget::onTimeOut);
timerLoading->start();
|
- 定时器槽函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| void LoadingWidget::onTimeOut() { if (!this->parentWidget()->isHidden()) { if (m_nAngle_ring == 360) { m_nAngle_ring = 0; } m_nAngle_ring += 2;
ui->labelLoadIcon->update(); } }
|