最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt設(shè)計(jì)時(shí)鐘效果

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

作為一位Qt的初學(xué)者,也是一位編程的小白,我今天想教大家如何使用Qt來設(shè)計(jì)一個(gè)時(shí)鐘。

首先,我們要學(xué)習(xí)如何繪圖——QPainter類

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

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

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

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

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

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

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

開始畫時(shí)鐘

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

float radious;//時(shí)鐘半徑

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

3)在.cpp文件中添加所需的頭文件,宏定義以及計(jì)算三種指針針尖坐標(biāo)的函數(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;//時(shí)分秒針的長(zhǎng)度
 //秒針的位置
 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);
 //時(shí)針的位置
 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中的構(gòu)造函數(shù)中添加初始化代碼

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

5)在.cpp文件中添加表盤,指針,以及進(jìn)位函數(shù)

void MainWindow::timerEvent(QTimerEvent *event)
{
 CalcPostion();//計(jì)算位置
 second++;
 if(second==60)
 {
 second=0;
 minute++;
 }//分增加
 if (minute==60)
 {
 minute=0;
 hour++;
 }//時(shí)增加
 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);//時(shí)針
}
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();
}

至此,時(shí)鐘就完成了,效果圖:

總結(jié):

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

文中一些理論知識(shí)選自 清華大學(xué)出版社 仇國(guó)巍 《Qt圖形界面編程入門》

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 4組C語言中順序讀寫文件的函數(shù)分享

    4組C語言中順序讀寫文件的函數(shù)分享

    這篇文章主要為大家詳細(xì)介紹了4組C語言中實(shí)現(xiàn)順序讀寫文件的函數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • C語言動(dòng)態(tài)內(nèi)存管理的實(shí)現(xiàn)

    C語言動(dòng)態(tài)內(nèi)存管理的實(shí)現(xiàn)

    本文主要介紹了C語言動(dòng)態(tài)內(nèi)存管理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++中vector容器的注意事項(xiàng)總結(jié)

    C++中vector容器的注意事項(xiàng)總結(jié)

    在c++中,vector是一個(gè)十分有用的容器,下面這篇文章主要給大家介紹了關(guān)于C++中vector容器的注意事項(xiàng),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • C++算法與泛型算法(algorithm、numeric)

    C++算法與泛型算法(algorithm、numeric)

    這篇文章主要介紹了C++算法與泛型算法(algorithm、numeric),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語言庫函數(shù)strcpy的使用及模擬實(shí)現(xiàn)

    C語言庫函數(shù)strcpy的使用及模擬實(shí)現(xiàn)

    本文主要介紹了C語言庫函數(shù)strcpy的使用及模擬實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Qt音視頻開發(fā)之通用監(jiān)控布局控件的實(shí)現(xiàn)

    Qt音視頻開發(fā)之通用監(jiān)控布局控件的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt開發(fā)一個(gè)通用的監(jiān)控布局控件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt開發(fā)有一定的幫助,需要的可以參考一下
    2023-01-01
  • C語言嵌入informix基礎(chǔ)入門示例講解

    C語言嵌入informix基礎(chǔ)入門示例講解

    這篇文章主要介紹了C語言嵌入informix基礎(chǔ)方法,大家參考使用
    2013-11-11
  • Qt實(shí)現(xiàn)簡(jiǎn)易毛玻璃效果的示例代碼

    Qt實(shí)現(xiàn)簡(jiǎn)易毛玻璃效果的示例代碼

    這篇文章主要介紹了Qt如何利用模糊功能實(shí)現(xiàn)簡(jiǎn)易的毛玻璃效果,并且鼠標(biāo)可以移動(dòng)無邊框窗口,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-06-06
  • C/C++通過IP獲取局域網(wǎng)網(wǎng)卡MAC地址

    C/C++通過IP獲取局域網(wǎng)網(wǎng)卡MAC地址

    這篇文章主要為大家詳細(xì)介紹了C++如何通過Win32API函數(shù)SendARP從IP地址獲取局域網(wǎng)內(nèi)網(wǎng)卡的MAC地址,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • C++中CSTRINGLIST用法詳解

    C++中CSTRINGLIST用法詳解

    這篇文章主要介紹了C++中CSTRINGLIST用法詳解的相關(guān)資料,需要的朋友可以參考下
    2015-06-06

最新評(píng)論

栾城县| 石屏县| 会理县| 德安县| 三门峡市| 三门峡市| 邯郸县| 仪陇县| 夏津县| 宁化县| 武邑县| 监利县| 宣武区| 林周县| 磴口县| 勐海县| 灵武市| 富裕县| 梅州市| 龙山县| 浠水县| 宜宾县| 武穴市| 平舆县| 拜泉县| 荃湾区| 临夏市| 康定县| 洛宁县| 大安市| 清水县| 渭源县| 宜黄县| 虎林市| 梁河县| 上杭县| 阿克苏市| 平塘县| 宁都县| 赫章县| 泗洪县|