前段時間網絡上比較火的太空人表盤,看着好多人都發揮自己的創意制作了各種各樣的樣式。於是我打算用QT也制作一個太空人表盤。
由於僅僅是做着玩的,所以沒有什么很復雜的功能。具體的原理可以理解成一個電子時鍾,只是UI稍微華麗了一點而已。看看我的制作
過程吧!
寫代碼之前先使用PS手動畫一個表盤,如下:


准備好旋轉的太空人,如下:

一、創建一個繼承與QWidget的工程。
二、在UI里設置背景和擺放好需要使用的控件位置

三、開始編寫C++代碼
---------------------------------------------------------widget.h-------------------------------------------------------------
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTime>
#include <QTimer>
#include <QMovie>
#include <QDateTime>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
public slots:
void show_time();
private:
Ui::Widget *ui;
bool showColon;
};
#endif // WIDGET_H
---------------------------------widget.cpp-----------------------------------------
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setFixedSize(500,500);
QPixmap pixmap(":/表盤.png");
QPalette palette = this->palette();
palette.setBrush(QPalette::Background,QBrush(pixmap));
this->setPalette(palette);
ui->lcdNumber->setFrameStyle(QFrame::NoFrame | QFrame::Raised);
ui->lcdNumber->setSegmentStyle(QLCDNumber::Flat);
ui->lcdNumber->setDigitCount(5);
ui->lcdNumber_2->setFrameStyle(QFrame::NoFrame | QFrame::Raised);
ui->lcdNumber_2->setSegmentStyle(QLCDNumber::Flat);
ui->lcdNumber_2->setDigitCount(2);
ui->lcdNumber_3->setFrameStyle(QFrame::NoFrame | QFrame::Raised);
ui->lcdNumber_3->setSegmentStyle(QLCDNumber::Flat);
ui->lcdNumber_3->setDigitCount(5);
QTimer *timer = new QTimer();
timer->setInterval(1000);
timer->start();
connect(timer,SIGNAL(timeout()),this,SLOT(show_time()));
ui->label->setFixedSize(89,100);
QMovie *movie = new QMovie(":/2 (2).gif");
ui->label->setMovie(movie);
movie->start();
}
void Widget::show_time()
{
QDateTime time = QDateTime::currentDateTime();
QString text = time.toString("hh:mm");
QString text1 = time.toString("ss");
QString text2 = time.toString("MM-dd");
QString text3 = time.toString("ddd");
if(showColon)
{
text[2]=':';
showColon=false;
}
else
{
text[2]=' ';
showColon=true;
}
ui->lcdNumber->display(text);
ui->lcdNumber_2->display(text1);
ui->lcdNumber_3->display(text2);
ui->label_2->setText(text3);
}
Widget::~Widget()
{
delete ui;
}
---------------------------------------------main.cpp--------------------------------------
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
四、運行后就能看到效果了

