2014-03-18 59 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); 

指針看起來是這樣的:

Pointer 現在用它旋轉90º With 90º

+0

第一張圖片顯示的是沒有旋轉應用的整個指針,第二張圖片只顯示了一小段指針,並且是在應用旋轉之後。這種印象是,當它旋轉時,他只拿一塊指針。 –

回答

0

Qt的模擬時鐘例如:

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

也許旋轉QPixmap年代以前,嘗試畫線。線路就位後,從那裏向後正確繪圖。

更新:

旋轉圖像的一些示例代碼。

widget.h

#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.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(); 
} 

希望有所幫助。

+0

在我的情況下,我已經設計了時鐘,只需要弄清楚如何轉動手,那麼這個例子就沒有太大的幫助。 –

+0

指針正在旋轉,但它不會停留在中心位置,因爲它會旋轉它的位置。愚蠢的他留在一個固定點,從而繞着圓圈旋轉?感謝您的關注。 –

+0

我想我發現了這個問題,但是我所做的所有測試都在paintEvent閱讀之外,並且看到只有在您遇到此問題時才能正常工作,但由於您的幫助才發現問題,所以非常感謝。 –