2013-03-01 1 views
3

슬롯 머신과 같은 이미지 루핑이 필요한 앱을 만들려고합니다. 나는 그들이 반복 할 필요가있는 순서대로 이미지를 가지고 있으며, 나중에 버튼을 누르면 어떤 위치에서 멈출 필요가 있습니다. QPixmap을 사용하고 지정된 간격으로 다시 그릴 수 있음을 알고 있습니다. 더 효율적인 방법이 있다고 확신합니다. 내가 원하는 것은 일정한 속도로 무한히 이미지를 반복하는 것입니다. 일단 버튼을 누르면 어떤 이미지를 정지 시킬지 계산하고 애니메이션 속도를 늦추고 미리 정해진 인덱스에서 x 초 후에 정지합니다. Qt 애니메이션 프레임 워크를 여기에서 사용할 수 있다고 생각합니다. 무한 루프를 만드는 방법을 모르겠습니다. 미리 감사드립니다. Qt에서 이미지를 효율적으로 루프하는 방법은 무엇입니까?

답변

1

내가 쓴 코드의 매우 단순화 된 버전 :

그것은 애니메이션 텍스트를 표시하고 원하는 거의 어떤 위젯입니다.

class Labels : public QFrame { 
    Q_OBJECT 
    Q_PROPERTY(int offset READ offset WRITE setOffset) 
public: 
    /* The property used to animate the view */ 
    int off; 
    QStringList texts; 
    Label() : QFrame() { 
     texts << "text 1" << "text 2" << "text 3" << "text 4"; 
     setFixedSize(200, 200); 
    } 
    void paintEvent(QPaintEvent *) { 
     QPainter painter(this); 
     int x = 20; 
     int y = 20; 
     foreach(QString str, texts) { 
      int y1 = y + off; 
      /* Used to draw the texts as a loop */ 
      /* If texts is underneath the bottom, draw at the top */ 
      if (y1 > height()) { 
       y1 -= height(); 
      } 
      painter.drawText(x, y1, str); 
      y+= 50; 
     } 
    } 

    int offset() { 
     return off; 
    } 

    void setOffset(int o) { 
     off = o; 
     update(); 
    } 
}; 

주요

:

int main(int argc, char **argv) { 
    QApplication app(argc, argv, true); 
    Labels l; 
    l.show(); 

    /* Animated the view */ 
    QPropertyAnimation *animation = new QPropertyAnimation(&l,"offset"); 
    animation->setLoopCount(-1); /* infinite loop */ 
    animation->setDuration(2000); 
    animation->setStartValue(0.0); 
    animation->setEndValue(200.0); 
    animation->start(); 
    return app.exec(); 
} 

가장 어려운 것은 최대 오프셋을 계산하는 것입니다 ...

+0

내가 비슷한 이에했다. 내 경우에는 최대 오프셋을 계산하는 것이 어렵지 않았습니다. 동일한 크기의 이미지를 표시하고 동일한 간격으로 이미지를 표시하기 때문입니다. 고맙습니다. – Amy

관련 문제