2014-03-18 1 views
0

아래의 코드를 사용하여 시계의 초침을 시뮬레이트하는 포인터를 회전하려고 시도하지만 회전 할 때 배경의 사각형이 고정되고 나는 모든 회전 할 수 아니에요 것 같다Qt를 사용하여 시계의 초침을 회전하는 방법

QPixmap shipPixels(":/new/prefix1/imagem/ponteiro.png"); 
    QPixmap rotatePixmap(shipPixels.size()); 
    rotatePixmap.fill(Qt::transparent); 

    QPainter p(&rotatePixmap); 

    p.translate(rotatePixmap.size().width()/2, rotatePixmap.size().height()/2); 
    p.rotate(90); 
    p.translate(-rotatePixmap.size().width()/2, -rotatePixmap.size().height()/2); 

    p.drawPixmap(0, 0, shipPixels); 
    p.end(); 

    shipPixels = rotatePixmap; 
    ui->label->setPixmap(rotatePixmap); 

포인터는 다음과 같습니다 : 그것은 90 º With 90º

+0

첫 번째 이미지는 회전 적용없이 전체 포인터를 표시하고 두 번째 이미지는 회전의 적용 후 포인터의 작은 부분 만 표시합니다. 인상은 그가 똑같이 회전 할 때 포인터의 한 부분 만 가져 가고 있다는 것입니다. –

답변

0

Qt는 아날로그 시계 예를 회전으로 지금

Pointer :

http://qt-project.org/doc/qt-5/qtwidgets-widgets-analogclock-example.html

아마 QPixmap의 회전하기 전에, 선 그리기보십시오. 선이 제자리에 있고 드로잉이 올바르게 그곳에서 뒤로 작업하십시오.

업데이트 :

일부 이미지 회전 용 샘플 코드.

widget.cpp

#include "widget.h" 
#include <QPainter> 
#include <QTimer> 
#include <QTime> 

Widget::Widget(QWidget *parent) : 
    QWidget(parent) 
{ 
    time.restart(); 
    this->resize(256, 256); 
    // both images are 256x256 in this example 
    bg.load("./images/bg.png"); 
    second_hand.load("./images/second_hand.png"); 
    QTimer * t = new QTimer; 
    t->setSingleShot(false); 
    t->setInterval(15); 
    QObject::connect(t,SIGNAL(timeout()), this, SLOT(update())); 
    t->start(); 
} 

void Widget::paintEvent(QPaintEvent * e) 
{ 
    QPainter p(this); 
    p.drawPixmap(QPoint(0,0),bg); 
    qreal seconds = ((qreal)(time.elapsed() % 60000))/1000; 
    p.translate(this->width()/2, this->height()/2); 
    p.rotate(seconds/60*360); 
    p.drawPixmap(QPoint(-this->width()/2, -this->height()/2),second_hand); 
} 

MAIN.CPP하는 데 도움이

#include "widget.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    Widget w; 
    w.show(); 

    return a.exec(); 
} 

희망

#ifndef WIDGET_H 
#define WIDGET_H 

#include <QWidget> 
#include <QPaintEvent> 
#include <QPixmap> 
#include <QTime> 

class Widget : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit Widget(QWidget *parent = 0); 

signals: 

public slots: 
    void paintEvent(QPaintEvent *); 
private: 
    QPixmap bg; 
    QPixmap second_hand; 
    QTime time; 
}; 

#endif // WIDGET_H 

widget.h.

+0

내 경우에는 이미 시계를 디자인 했으므로 손을 돌리는 방법을 알아 내야합니다. 그러면이 예제가별로 도움이되지 않습니다. –

+0

포인터가 회전하고 있지만 포인터가 회전함에 따라 포인터가 위치를 변경하면 가운데에 머 무르지 않습니다. 고정 된 점 중 하나에 머물러 서클 주위를 회전하려면 바보가 어디입니까? 관심을 가져 주셔서 감사합니다. –

+0

나는 문제를 발견했다고 생각하지만, 내가하고 있었던 모든 테스트는 페인트 밖에 있었다. 당신이 이것에 참여했다면 읽는 것이고 작동하는 것을 보았다. 그러나 당신의 도움으로 만 발견했다. 감사한다. –

관련 문제