1. 程式人生 > 程式設計 >Qt程式設計實現小時鐘

Qt程式設計實現小時鐘

Hello World! 學習程式語言的最簡單最經典的小程式,當然Qt也不例外。在學習畫圖時,我覺得寫個時鐘小程式也是個比較好的開始。在之前的《Matlab及Java小時》一文中,我也從寫時鐘程式作為學習畫圖的開始。三者之間的不同點在於,matlab是通過while迴圈來進行重繪,Java和Qt事件來處理。實時顯示時鐘,都是通過改變指標與座標軸的相對位置來實現的。前兩者都是改變指標,而Qt是旋轉座標軸。具體程式碼如下:

1.widget.h檔案

#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
 
namespace Ui {
class Widget;
}
 
class Widget : public QWidget
{
 Q_OBJECT
 
public:
 explicit Widget(QWidget *parent = 0);
 ~Widget();
 
private:
 Ui::Widget *ui;
protected:
 void paintEvent(QPaintEvent *event);//新增重繪事件
};
 
#endif // WIDGET_H

2.main.cpp

#include <QtGui/QApplication>
#include "widget.h"
#include<QTextCodec>
#include<QPainter>
#include<QtGui>
#include<QDebug>
 
int main(int argc,char *argv[])
{
 QApplication a(argc,argv);
 QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
 Widget w;
 w.show();
 
 return a.exec();
}

3.widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QPainter>
#include<QtGui>
#include<QDebug>
#include<QFont>
 
Widget::Widget(QWidget *parent) :
 QWidget(parent),ui(new Ui::Widget)
{
 ui->setupUi(this);
 QTimer *timer = new QTimer(this);//建立一秒定時器
 connect(timer,SIGNAL(timeout()),this,SLOT(update()));//訊號與槽關聯
 timer->start(1000);
 setWindowTitle(tr("我的時鐘--designed by TW"));
 
}
 
Widget::~Widget()
{
 delete ui;
}
 
void Widget::paintEvent(QPaintEvent *event)
{
 int side = qMin(width(),height());//獲取視窗的較短邊的值
 QPainter painter(this);//指定畫圖裝置
 painter.fillRect(rect(),Qt::yellow);//設定背景色
 painter.setRenderHint(QPainter::Antialiasing);//開啟抗鋸齒
 painter.translate(width() / 2,height() / 2);//將座標移到視窗正中心
 painter.scale(side / 200.0,side / 200.0);//進行縮放
 
 QPen pen;//設定畫筆的,寬度,樣式,顏色
 pen.setWidth(2);
 pen.setStyle(Qt::SolidLine);
 pen.setColor(Qt::red);
 
 painter.setPen(pen);
 for (int i = 0; i < 12; ++i) //畫表盤時針刻度
 {
 painter.drawLine(87,95,0);
 painter.rotate(30);//將座標進行順時針選擇30度
 }
 
 pen.setWidth(1);
 pen.setColor(Qt::black);
 painter.setPen(pen);
 
 for (int i = 0; i < 60; ++i) //畫表盤時針刻度
 {
 if(i%5!=0)
  painter.drawLine(90,0);
 painter.rotate(6);
 }
 
 pen.setColor(Qt::black);
 painter.setPen(pen);
 QFont font("Century");
 painter.setFont(font);
 //標時刻的數值
 painter.drawText(-6,-75,tr("12"));
 painter.drawText(-3,80,tr("6"));
 painter.drawText(75,5,tr("3"));
 painter.drawText(-80,tr("9"));
 
 painter.drawArc(-3,-3,6,360*16);//畫中心小圓環
 /////////////////////////////////////
 QTime time = QTime::currentTime();//獲取當前系統時間
// qDebug()<<time.hour();
// qDebug()<<time.minute();
// qDebug()<<time.second();
 
 //畫時針
 painter.save();//在旋轉座標系前,儲存原來座標系
 painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
 pen.setColor(Qt::green);
 pen.setWidth(4);
 painter.setPen(pen);
 painter.drawLine(0,-60);
 painter.restore();//在旋轉座標系後,恢復原來座標系
 //畫分針
 painter.save();
 painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
 pen.setColor(Qt::blue);
 pen.setWidth(2);
 painter.setPen(pen);
 painter.drawLine(0,-80);
 painter.restore();
 //畫秒針
 painter.save();
 painter.rotate(6.0 *time.second() );
 pen.setColor(Qt::red);
 pen.setWidth(1);
 painter.setPen(pen);
 //秒針形狀由兩條直線和一個小圓環組成
 painter.drawArc(-3,-66,360*16);
 painter.drawLine(0,20,-60);
 painter.drawLine(0,-85);
 painter.restore();
 
 
}

執行結果如下圖:

Qt程式設計實現小時鐘

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。