用Qt加载一张图片----定时旋转图片

遇到一个问题,加载一张图片并使其定时旋转,类似电脑加载程序时鼠标的旋转效果.目前遇到的问题有3个:
1.不断加载图片的过程导致本模块占用CPU率高.
2.图片在旋转时有轻微抖动.
3.图片旋转时有锯齿.

如下是代码:

1).在构造函数中定义定时器m_loadtimer和图标的背景label:
QTimer* m_loadtimer;
NGILabel* m_syniconlabel;
TextSyncSMS::TextSyncSMS(QWidget *parent) : QWidget(parent)
,CView(eViewId_SyncSMS)
,m_loadtimer(new QTimer(this))
{
this->m_syniconlabel = new NGILabel(this);
this->m_syniconlabel->setGeometry(375,227,59,59);
this->m_syniconlabel->setAlignment(Qt::AlignCenter);
this->m_syniconlabel->setStyleSheet("background:transparent;"); m_loadtimer->setSingleShot(false);
connect(m_loadtimer,SIGNAL(timeout()),this,SLOT(onTimerout()));
}

2).在整个页面显示的时候调用函数restartTimer():
INFO("TextSyncSMS::StateAction() call restartTimer() ")
restartTimer();
this->show();

3).在函数restartTimer()中调用onTimerout():
void TextSyncSMS::restartTimer()
{
    m_loadtimer->start(100);
    i_Angle = 0;
    INFO("called the onTimerout")
    onTimerout();
}

4).在函数onTimerout()中实现旋转:
void TextSyncSMS::onTimerout()
{
    ++i_Angle;
    i_Angle = i_Angle % 36;
    QImage image;
    QMatrix matrix;
    image.load(":/UI/Picture_resource/Text_SVG/Text_Icon_Loading.svg");
    INFO("load the icon ")
    matrix.rotate(360 - 10.0 * i_Angle);//页面旋转
    INFO("rotate the icon")
    image=image.transformed(matrix,Qt::SmoothTransformation);
    m_syniconlabel->setPixmap(QPixmap::fromImage(image));
}


自己百度查了下:
1.抖动有几种,边缘锯齿和图像偏移
做一个固定的matrix,然后做一个临时用的matrix,为基本matrix的rotate(x*time).因为你用一个matrix不停的rotate肯定会导致锚点偏的越来越远的
2.Qt::SmoothTransformation比Qt::FastTransformation清晰度高,但是CPU占用率也高

最终解决方法:

你可能感兴趣的:(Qt,qt,图片,旋转)