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

Qt實現(xiàn)指針式時鐘 Qt實現(xiàn)動態(tài)時鐘

 更新時間:2020年07月12日 10:39:59   作者:Baret H ~  
這篇文章主要為大家詳細介紹了Qt實現(xiàn)指針式時鐘,Qt實現(xiàn)動態(tài)時鐘,兩者相互切換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Qt實現(xiàn)指針式時鐘、動態(tài)時鐘的具體代碼,供大家參考,具體內(nèi)容如下

先上圖:

點擊運行后首先是一個指針式時鐘窗口,點擊Digital Clock->可以跳轉(zhuǎn)到數(shù)字時鐘窗口,再點擊Move Clock->可以還原為指針式時鐘窗口

關(guān)于整個程序的講解都在代碼注釋中給出,很詳細~

概要:

我設計兩個窗口,一個主窗口一個子窗口,利用按鈕+信號與槽機制,實現(xiàn)兩個窗口的互相切換,其中主窗口用來顯示指針時鐘,完成三個基本要求:

1、正確顯示系統(tǒng)時鐘;
2、能準確定位時鐘刻度和時分秒針的位置;
3、能隨窗口大小的變化而變化; 

關(guān)于主窗口的實現(xiàn),首先利用Qt自帶的時間函數(shù)QTime::currentTime()獲取系統(tǒng)時間,然后利用paintEvent(QPaintEvent *)函數(shù)根據(jù)獲取到的系統(tǒng)時間進行時針,分針,秒針的繪畫,并且畫出對應的小時刻度線,分鐘刻度線,秒刻  度線,實現(xiàn)基本時鐘的樣式,最后加入scale()函數(shù)進行相應的比例縮放,實現(xiàn)時鐘能隨窗口的大小變化而變化;

關(guān)于子窗口,是我自己多加入的模塊,是一個電子時鐘,用一個lcd液晶顯示器以”時:分:秒”的格式顯示當下時間,同樣是利用自帶的時間函數(shù)QTime::currentTime()獲取當前時間并通過lcd顯示。最后將兩個窗口通過兩個按鈕連接起來,實現(xiàn)互相切換功能。

mainwindow.h(主窗口)

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include<QLCDNumber>
#include<QLabel>
#include<sub.h>
#include<QPushButton>
 
QT_BEGIN_NAMESPACE
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
 Q_OBJECT
 
public:
 MainWindow(QWidget *parent = nullptr);//構(gòu)造函數(shù)
 ~MainWindow();//析構(gòu)函數(shù)
 void paintEvent(QPaintEvent *);//畫時鐘函數(shù)
public:
 void dealsub();//轉(zhuǎn)換為子窗口
 void changeback();//轉(zhuǎn)換為主窗口
private:
 sub w;//子窗口
 QPushButton b;//按鈕
};
#endif // MAINWINDOW_H

mainwindow.cpp(主窗口)

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPainter>
#include<QPen>
#include<QTime>
#include<QTimer>
#include<QLabel>
#include<QPushButton>
#include<QLCDNumber>
MainWindow::MainWindow(QWidget *parent)
 : QMainWindow(parent)
{
 setWindowIcon(QIcon(":/new/prefix1/v2-d858191577356128b31c88e186eea0db_r.jpg"));//設置圖標
 QTimer *timer = new QTimer(this);//產(chǎn)生一個定時器
 connect(timer, SIGNAL(timeout()), this, SLOT(update()));//關(guān)聯(lián)定時器的信號與槽
 timer->start(1000);//開始定時器,每一秒鐘更新一次
 resize(600,600);//窗口大小
 b.setParent(this);//指定按鈕父對象
 b.setGeometry(0,0,160,40);//設置按鈕位置
 b.setText("Digital clock->");//設置按鈕內(nèi)容
 b.setStyleSheet("QPushButton{background-color: rgba(205,214,216,0);color:rgb(0,0,0);}");//設置按鈕樣式,rgba前三個參數(shù)同rgb,最后一個參數(shù)表示不透明度,0~1之間
 connect(&b,&QPushButton::released,this,&MainWindow::dealsub);//鼠標松開時觸發(fā),跳轉(zhuǎn)到處理子窗口函數(shù)
 void(sub::*funsignal)()=&sub::mysignal;
 connect(&w,funsignal,this,&MainWindow::changeback);//關(guān)聯(lián)信號與槽,實現(xiàn)從子窗口返回到主窗口
}
 
MainWindow::~MainWindow()
{
 
}
 
void MainWindow::paintEvent(QPaintEvent *)
{
 static const QPoint hour[3] = {
  QPoint(14, 15),
  QPoint(-14, 15),
  QPoint(0, -110)
 };
 static const QPoint minute[3] = {
  QPoint(11, 13),
  QPoint(-11, 13),
  QPoint(0, -170)
 };
 static const QPoint second[3] = {
  QPoint(7, 8),
  QPoint(-7, 8),
  QPoint(0, -210)
 };
 int size=qMin(width(),height());
 QTime time=QTime::currentTime();//獲取系統(tǒng)當前時間
 QPainter p(this);//創(chuàng)建畫家對象
 p.setRenderHint(QPainter::Antialiasing);//防止圖形走樣
 p.translate(width()/2,height()/2);//平移坐標系置中心
 p.scale(size/600.0,size/600.0);//縮放
 
 QBrush brush;//定義畫刷
 brush.setColor(QColor(245,182,96));//設置畫刷顏色
 brush.setStyle(Qt::SolidPattern);//設置樣式
 
 
 QPen pen;//定義畫筆
 pen.setWidth(18);//設置畫筆寬度
 pen.setColor(QColor(205,214,216));//rgb設置顏色
 pen.setStyle(Qt::SolidLine);//設置風格
 p.setPen(pen);//將畫筆交給畫家
 p.drawEllipse(QPoint(0,0),280,280);//畫圓
 pen.setColor(Qt::white);
 pen.setWidth(160);//設置畫筆寬度
 p.setPen(pen);//將畫筆交給畫家
 p.drawEllipse(QPoint(0,0),160,160);//畫圓
 //畫時針
 p.setBrush(brush);//將畫刷交給畫家
 p.setPen(Qt::NoPen);
 p.save();//保存當下狀態(tài)
 p.rotate(30.0*(time.hour()+time.minute()/60.0));//圖形旋轉(zhuǎn),以原點為旋轉(zhuǎn)中心,順時針水平旋轉(zhuǎn)對應時針的角度
 p.drawConvexPolygon(hour,3);//畫時針這個凸多邊形,第一個參數(shù)為所有的點,第二個參數(shù)為點的個數(shù)
 p.restore();//恢復上一次保存的結(jié)果,和save()成對出現(xiàn)
 
 //繪制小時線
 pen.setStyle(Qt::SolidLine);
 pen.setWidth(5);
 pen.setColor(Qt::black);
 p.setPen(pen);
 for(int i=0;i<12;i++)
 {
  p.drawLine(0,268,0,276);//畫小時線
  p.drawText(-5,-235,QString::number(i));//表明小時數(shù)
  p.rotate(30);//每畫一次旋轉(zhuǎn)30度
 }
 
 //畫分針
 p.setPen(Qt::NoPen);
 p.setBrush(QColor(144,199,247));
 p.save();//保存當下狀態(tài)
 p.rotate(6.0*(time.minute()+time.second()/60.0));//順時針旋轉(zhuǎn)至分針的位置
 p.drawConvexPolygon(minute,3);//畫分針這個凸多邊形,第一個參數(shù)為所有的點,第二個參數(shù)為點的個數(shù)
 p.restore();//恢復上一次保存的結(jié)果,和save()成對出現(xiàn)
 
 //繪制分鐘線
 pen.setStyle(Qt::SolidLine);
 pen.setColor(QColor(0,0,0));
 pen.setWidth(1);
 p.setPen(pen);
 for(int i=0;i<60;i++)
 {
  if((i%5)!=0)
  p.drawLine(0,265,0,276);//5的倍數(shù)時不畫,因為有小時線
  p.rotate(6);//每畫一次旋轉(zhuǎn)6度
 }
 
 //畫秒線
 p.setPen(Qt::NoPen);
 p.setBrush(QColor(119,217,175));
 p.save();
 p.rotate(6*time.second());//順時針旋轉(zhuǎn)至秒針的位置
 p.drawConvexPolygon(second, 3);//畫秒針這個凸多邊形,第一個參數(shù)為所有的點,第二個參數(shù)為點的個數(shù)
 p.restore();
 
 //畫圓心
 p.setBrush(Qt::black);
 p.setPen(Qt::white);
 p.save();
 p.drawEllipse(QPoint(0,0),3,3);//畫圓心
 p.restore();
 
 //表明上午還是下午
 p.setPen(Qt::black);
 if(time.hour()>=12)
 p.drawText(-6,-50,"PM");//畫文本區(qū)
 else
 p.drawText(-6,-50,"AM");//畫文本區(qū)
 p.drawText(-60,-130,"Made By ZSR");//畫文本區(qū)
}
 
void MainWindow::dealsub()
{
 w.show();//顯示子窗口
 this->hide();//主窗口隱藏
}
 
void MainWindow::changeback()
{
 w.hide();//子窗口隱藏
 this->show();//顯示主窗口L
}

sub.h(子窗口)

#ifndef SUB_H
#define SUB_H
 
#include <QMainWindow>
#include<QPushButton>
#include<QLCDNumber>
class sub : public QMainWindow
{
 Q_OBJECT
public:
 explicit sub(QWidget *parent = nullptr);
 void sentsignal();//發(fā)送信號
 void paintEvent(QPaintEvent *event);//畫電子時鐘
signals://信號
 void mysignal();
public slots://槽
 void showtime();//顯示時間函數(shù)
private:
 QPushButton b1;//按鈕
 QLCDNumber *lcd;//lcd
};
 
#endif // SUB_H

sub.cpp(子窗口)

#include "sub.h"
#include<QTime>
#include<QTimer>
#include<QLCDNumber>
#include<QPainter>
sub::sub(QWidget *parent) : QMainWindow(parent)
{
 setWindowIcon(QIcon(":/new/prefix1/f56513788384645db768d0ec542dec33_r.jpg"));//設置圖標
 this->setWindowTitle("Digital clock");//設置窗口標題
 this->resize(900,500);//設置窗口大小
 b1.setParent(this);//指按鈕定父對象
 b1.setText("Move clock->");//設置按鈕內(nèi)容
 b1.setGeometry(0,0,140,40);//設置按鈕位置
 b1.setStyleSheet("QPushButton{background-color: rgba(205,214,216,0);color:rgb(0,0,0);}");//設置按鈕風格
 connect(&b1,&QPushButton::clicked,this,&sub::sentsignal);//連接信號與槽,當點擊按鈕的時候跳轉(zhuǎn)到發(fā)送信號函數(shù),主窗口接收,再執(zhí)行changeback()函數(shù),即實現(xiàn)了跳回主窗口
 QTimer *timer1=new QTimer(this);////產(chǎn)生一個定時器
 timer1->start(1000);//開始定時器,每一秒鐘更新顯示時間
 connect(timer1,SIGNAL(timeout()),this,SLOT(showtime()));//關(guān)聯(lián)定時器的信號與槽,1s到即更新顯示時間
 lcd=new QLCDNumber();//創(chuàng)建一個lcd液晶顯示器
 lcd->setSegmentStyle(QLCDNumber::Filled);//設置顯示器風格
 lcd->setParent(this);//指定顯示器父對象
 lcd->move(0,50);//移動顯示器位置
 lcd->setDigitCount(8);//設置所顯示的位數(shù)為8位
 lcd->resize(200,50);//設置顯示器大小
 showtime();//顯示時間
}
 
void sub::sentsignal()//發(fā)送信號
{
 emit mysignal();
}
 
void sub::showtime()
{
 QTime time1=QTime::currentTime();//獲取當前時間
 QString text=time1.toString("hh:mm:ss");//定義時間顯示格式
 if((time1.second()%2)==0)
  text[5]=' ';//每2s冒號消失一次
 lcd->display(text);//lcd顯示時間
}
 
void sub::paintEvent(QPaintEvent *event)//
{
 QPainter p(this);//創(chuàng)建一個畫家對象
 p.drawPixmap(rect(),QPixmap(":/new/prefix1/f8fa6c0b00b51e33e8949627d52942ea.jpg"));//設置背景圖
}

main.cpp(主函數(shù))

#include "mainwindow.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
 QApplication a(argc, argv);
 MainWindow w;//創(chuàng)建一個主窗口
 w.setWindowTitle("Move clock");//設置主窗口標題
 w.show();//顯示主窗口
 return a.exec();
}

THE END

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

相關(guān)文章

  • C++友元(Friend)用法實例簡介

    C++友元(Friend)用法實例簡介

    這篇文章主要介紹了C++友元(Friend)用法,對于C++的學習來說有很好的參考價值,需要的朋友可以參考下
    2014-08-08
  • C語言switch語句和if用法介紹

    C語言switch語句和if用法介紹

    本文詳細講解了C語言switch語句和if用法介紹,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • 一文總結(jié)C++中的異常

    一文總結(jié)C++中的異常

    異常是一種處理錯誤的方式,當一個函數(shù)發(fā)現(xiàn)自己無法處理的錯誤時就可以拋出異常,讓函數(shù)的直接或間接調(diào)用者處理這個錯誤,本文給大家總結(jié)了C++中的異常,需要的朋友可以參考下
    2023-10-10
  • c++?對象分配在棧上還是在堆上問題分析

    c++?對象分配在棧上還是在堆上問題分析

    這篇文章主要為大家介紹了c++?對象在棧上還是在堆上問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • C語言猜兇手的代碼實現(xiàn)

    C語言猜兇手的代碼實現(xiàn)

    本文主要介紹了C語言猜兇手的代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 實現(xiàn)去除c語言注釋的小工具

    實現(xiàn)去除c語言注釋的小工具

    這篇文章主要介紹了實現(xiàn)去除c語言注釋的小工具,說是C語言,但其實所有C語系的都可以,比如Java,需要的朋友可以參考下
    2014-02-02
  • C++語法詳解之封裝、構(gòu)造函數(shù)、析構(gòu)函數(shù)

    C++語法詳解之封裝、構(gòu)造函數(shù)、析構(gòu)函數(shù)

    這篇文章主要介紹了C++語法詳解之封裝、構(gòu)造函數(shù)、析構(gòu)函數(shù)的相關(guān)知識,通過實例代碼給大家詳細介紹,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C語言中#define定義的標識符和宏實例代碼

    C語言中#define定義的標識符和宏實例代碼

    C語言中,可以用#define定義一個標識符來表示一個常量,下面這篇文章主要給大家介紹了關(guān)于C語言中#define定義的標識符和宏的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • C++知識點之成員函數(shù)中const的用法

    C++知識點之成員函數(shù)中const的用法

    這篇文章主要介紹了C++知識點之成員函數(shù)中const的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 淺談C++虛重載操作符 virtual operator= 的使用方法

    淺談C++虛重載操作符 virtual operator= 的使用方法

    下面小編就為大家?guī)硪黄獪\談C++虛重載操作符 virtual operator= 的使用方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論

奉新县| 盐池县| 丽江市| 屏东县| 贡山| 滦南县| 德令哈市| 福建省| 和平区| 乐平市| 惠来县| 淳安县| 东源县| 乌拉特后旗| 仲巴县| 平定县| 铜鼓县| 泰来县| 衡阳县| 耒阳市| 依安县| 洪雅县| 康平县| 南丰县| 咸宁市| 宁海县| 乐都县| 巩义市| 涟水县| 如皋市| 佛坪县| 重庆市| 冷水江市| 松滋市| 平谷区| 昌黎县| 新郑市| 明水县| 河曲县| 横山县| 峨边|