歡迎您光臨本站 註冊首頁

Qt設計時鐘效果

←手機掃碼閱讀     月球人 @ 2020-06-10 , reply:0

作為一位Qt的初學者,也是一位程式設計的小白,我今天想教大家如何使用Qt來設計一個時鐘。

首先,我們要學習如何繪圖――QPainter類

QPainter通常在一個視窗的重繪事件(paint event)的處理函式paintEvent中進行繪製。QPainter類常用的功能有以下幾類:

1)設定繪圖工具。包括設定畫筆(setPen),設定畫刷(setBrush),設定字型(setFont)以及設定背景(setBackgroundMode)。
 

2)繪製圖形和文字,如圖:

QPainter部分畫圖函式的例項:

  //(1)繪製線段  painter->drawLine(20,20,100,120);  //畫一條(20,20)到(100,120)的線段    //(2)繪製圓或者橢圓  painter->drawEllipse(20,20,210,160);  //第一二個引數表示橢圓外切矩形左上角的座標,第三四個引數表示外切矩形的寬度和高度    //(3)繪製矩形  painter->drawReact(20,20,210,160);  //第一二個引數表示橢圓外切矩形左上角的座標,第三四個引數表示矩形的寬度和高度

 

開始畫時鐘

1)新建基於MainWindow類的應用程式。
 2)在.h檔案中新增變數和函式宣告

  float radious;//時鐘半徑    int xSecond,ySecond,xHour,yHour,xMinute,yMinute;  int xCenter,yCenter;// 時鐘中心座標  int second,minute,hour;//時分秒的實際數字  void CalcPostion();//計算指標座標的函式  void timerEvent(QTimerEvent*);  void paintEvent(QPaintEvent*event);  void drawClockDial(QPainter *painter);

 

3)在.cpp檔案中新增所需的標頭檔案,巨集定義以及計算三種指標針尖座標的函式

  #include "mainwindow.h"  #include#include#define PI 3.14159265

 

  void MainWindow::CalcPostion()  {   double minuteHandLen,secondHandLen,hourHandLen;   secondHandLen=radious*0.8;   minuteHandLen=radious*0.65;   hourHandLen=radious*0.5;//時分秒針的長度   //秒針的位置   xSecond=xCenter+secondHandLen*cos(second*PI/30-PI/2);   ySecond=yCenter+secondHandLen*sin(second*PI/30-PI/2);   //分針的位置   xMinute=xCenter+minuteHandLen*cos(minute*PI/30-PI/2);   yMinute=xCenter+minuteHandLen*sin(minute*PI/30-PI/2);   //時針的位置   xHour=xCenter+hourHandLen*cos((hour+1.0*minute/60)*PI/6-PI/2);   yHour=yCenter+hourHandLen*sin((hour+1.0*minute/60)*PI/6-PI/2);  }

 

4)在.cpp中的建構函式中新增初始化程式碼

  MainWindow::MainWindow(QWidget *parent)   : QMainWindow(parent)  {   radious=200;//半徑200   xCenter=200;   yCenter=200;//圓心(200,200)   hour=3,minute=56,second=35;//初試時間3:56:35   CalcPostion();   startTimer(100);//方便觀察,加速10倍   resize(400,400);//視窗大小400*400  }

 

5)在.cpp檔案中新增錶盤,指標,以及進位函式

  void MainWindow::timerEvent(QTimerEvent *event)  {   CalcPostion();//計算位置   second++;   if(second==60)   {    second=0;    minute++;   }//分增加   if (minute==60)   {    minute=0;    hour++;   }//時增加   update();  }  void MainWindow::paintEvent(QPaintEvent *event)  {   QPainter painter(this);   QPixmap map("://res/01.jpg");//加入錶盤   QRect q(0,0,400,400);   painter.drawPixmap(q,map,q);   QPen pen;   painter.drawEllipse(QPointF(200.0,200.0),radious,radious);//畫圓   painter.drawLine(xCenter,yCenter,xSecond,ySecond);//秒針   pen.setWidth(2);   painter.setPen(pen);   painter.drawLine(xCenter,yCenter,xMinute,yMinute);//分針   pen.setWidth(4);   painter.setPen(pen);   painter.drawLine(xCenter,yCenter,xHour,yHour);//時針  }  MainWindow::~MainWindow()  {   delete ui;  }

 

6)main檔案:

  #include "mainwindow.h"    #includeint main(int argc, char *argv[])  {   QApplication a(argc, argv);   MainWindow w;   w.show();   return a.exec();  }

 

至此,時鐘就完成了,效果圖:

總結:

1)製作時鐘就是簡單地二維畫圖和定時器的結合,難度不高,易上手,可以多嘗試。
 2)在計算針尖的座標時,注意Qt的座標X軸橫向向右為正,Y軸垂直向下為正,順時針度數增加,不然很容易算錯。
 3)新增錶盤(新增圖片)在我上一個部落格有詳細講解,不會的同學可以去翻翻。

文中一些理論知識選自 清華大學出版社 仇國巍 《Qt圖形介面程式設計入門》

最後,作為一名萌新,如果有大佬發現文章中有不正確的地方可以及時提出,也可以提出你們寶貴的建議,大家共同成長。


[月球人 ] Qt設計時鐘效果已經有272次圍觀

http://coctec.com/docs/program/show-post-237866.html