欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt設計時鐘效果

 更新時間:2020年05月30日 16:34:40   作者:Dear Mr.Shuai  
這篇文章主要為大家詳細介紹了Qt設計時鐘效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

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

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

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

QPainter部分畫圖函數(shù)的實例:

//(1)繪制線段
painter->drawLine(20,20,100,120);
//畫一條(20,20)到(100,120)的線段

//(2)繪制圓或者橢圓
painter->drawEllipse(20,20,210,160);
//第一二個參數(shù)表示橢圓外切矩形左上角的坐標,第三四個參數(shù)表示外切矩形的寬度和高度

//(3)繪制矩形
painter->drawReact(20,20,210,160);
//第一二個參數(shù)表示橢圓外切矩形左上角的坐標,第三四個參數(shù)表示矩形的寬度和高度

開始畫時鐘

1)新建基于MainWindow類的應用程序。
2)在.h文件中添加變量和函數(shù)聲明

float radious;//時鐘半徑

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

3)在.cpp文件中添加所需的頭文件,宏定義以及計算三種指針針尖坐標的函數(shù)

#include "mainwindow.h"
#include<qmath.h>
#include<QPainter>
#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中的構造函數(shù)中添加初始化代碼

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文件中添加表盤,指針,以及進位函數(shù)

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"

#include <QApplication>

int main(int argc, char *argv[])
{
 QApplication a(argc, argv);
 MainWindow w;
 w.show();
 return a.exec();
}

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

總結:

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論