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

QT實(shí)現(xiàn)簡單時(shí)鐘效果

 更新時(shí)間:2020年05月30日 08:44:02   作者:師子文  
這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)簡單時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了QT實(shí)現(xiàn)簡單時(shí)鐘效果的具體代碼,供大家參考,具體內(nèi)容如下

先上效果圖:

預(yù)備知識:

一.鐘表實(shí)現(xiàn)原理

設(shè)置定時(shí)器timer,每隔1000毫秒(即1s)發(fā)送timeout()信號到槽函數(shù)update(),重繪事件函數(shù)paintEvent(QPaintEventevent)

二.鐘表的繪制方法

拆分鐘表:表盤 數(shù)字 刻度線 指針

paintEvent(QPaintEventevent)

1.設(shè)置定時(shí)器,時(shí)間間隔為1000毫秒,并且將定時(shí)器時(shí)間與update函數(shù)關(guān)聯(lián)為信號和槽,定時(shí)器每隔1秒發(fā)送一個(gè)信號
2.繪制時(shí)針分針秒針的形狀。

// 時(shí)針、分針、秒針 - 多邊形
 static const QPoint hourHand[3] = {
 QPoint(3, 8),
 QPoint(-3, 8),
 QPoint(0, -40)
 };


 static const QPoint minuteHand[3] = {
 QPoint(3, 8),
 QPoint(-3, 8),
 QPoint(0, -65)
 };


 static const QPoint secondHand[3] = {
 QPoint(3, 8),
 QPoint(-3, 8),
 QPoint(0, -80)
 };

3.繪制時(shí)針和時(shí)刻度線

 // 繪制時(shí)針
 painter.setPen(Qt::NoPen);
 painter.setBrush(hourColor);
 painter.save();
 painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
 painter.drawConvexPolygon(hourHand, 3);
 painter.restore();
 painter.setPen(hourColor);
  // 繪制時(shí)刻度線
 for (int i = 0; i < 12; ++i)
 {
  painter.drawLine(88, 0, 96, 0);
  painter.rotate(30.0);
 }
 QFont font = painter.font();
 font.setBold(true);
 painter.setFont(font);

下面是一些基礎(chǔ)的繪圖函數(shù):

drawPoint() 繪制點(diǎn)
drawLine() 繪制線
drawRect() 繪制矩形
drawEllipse() 繪制橢圓(繪制圓也是此函數(shù))
drawConvexPolygon() 繪制凸多邊形
drawText() 編制文本

特別的,我們還會經(jīng)常用到
QPen:繪制幾何圖形的邊緣,可繪制顏色,寬度,線的風(fēng)格等
QBrush:用于幾何圖形的調(diào)色板與填充
則可借用setPen()來當(dāng)做畫筆來使用。
setBrush()來當(dāng)做填充器使用來填充顏色。
setPen(color);
然后我們的繪制將會用此顏色的畫筆來繪制圖形邊緣。
setBrush(color);

主要代碼展示:

void Widget::drawhourhand(QPainter*painter)
{
 QTime time=QTime::currentTime();
 painter->setBrush(Qt::blue);//畫刷,填充
 painter->setPen(Qt::Dense7Pattern);//畫筆,制作廓線
 painter->save();
 painter->rotate(30.0*(time.hour()+time.minute()/60));//使得指針旋轉(zhuǎn)到當(dāng)前時(shí)間位置
 painter->drawConvexPolygon(hourhand,4);;//繪制時(shí)針(凸多邊形)
 painter->restore();//與save連著用 繪制圖形后復(fù)位坐標(biāo)系
}
void Widget::drawminutehand(QPainter*painter)
{
 QTime time=QTime::currentTime();
 painter->setBrush(Qt::white);
 painter->setPen(Qt::Dense5Pattern);
 painter->save();
 painter->rotate(6.0*(time.minute()+time.second()/60.0));
 painter->drawConvexPolygon(minutehand,4);
 painter->restore();
}
void Widget::drawsecondhand(QPainter*painter)
{
 QTime time=QTime::currentTime();
 painter->setBrush(Qt::red);
 painter->setPen(Qt::Dense5Pattern);
 painter->save();
 painter->rotate(6*time.second());
 painter->drawPolygon(minutehand,4);
 painter->restore();
}
``


```cpp
#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent) :
 QWidget(parent),
 ui(new Ui::Widget)
{
 ui->setupUi(this);
 font.setPixelSize(10);
 setFont(font);
 setWindowTitle("THE CLOCK");
 resize(1200,820);
}


Widget::~Widget()
{
 delete ui;
}
const QPoint Widget::hourhand[4]={
 QPoint(5,5),QPoint(0,13),QPoint(-5,5),QPoint(0,-40)
};
const QPoint Widget::minutehand[4]={
 QPoint(3,5),QPoint(0,16),QPoint(-3,5),QPoint(0,-70)
};
const QPoint Widget::secondhand[4]={
 QPoint(0,0),QPoint(0,0),QPoint(0,0),QPoint(0,0)
};
void Widget::drawhourhand(QPainter*painter)
{
 QTime time=QTime::currentTime();
 painter->setBrush(Qt::blue);//畫刷,填充
 painter->setPen(Qt::Dense7Pattern);//畫筆,制作廓線
 painter->save();
 painter->rotate(30.0*(time.hour()+time.minute()/60));//使得指針旋轉(zhuǎn)到當(dāng)前時(shí)間位置
 painter->drawConvexPolygon(hourhand,4);;//繪制時(shí)針(凸多邊形)
 painter->restore();//與save連著用 繪制圖形后復(fù)位坐標(biāo)系
}
void Widget::drawminutehand(QPainter*painter)
{
 QTime time=QTime::currentTime();
 painter->setBrush(Qt::white);
 painter->setPen(Qt::Dense5Pattern);
 painter->save();
 painter->rotate(6.0*(time.minute()+time.second()/60.0));
 painter->drawConvexPolygon(minutehand,4);
 painter->restore();
}
void Widget::drawsecondhand(QPainter*painter)
{
 QTime time=QTime::currentTime();
 painter->setBrush(Qt::red);
 painter->setPen(Qt::Dense5Pattern);
 painter->save();
 painter->rotate(6.0*time.second());
 painter->drawPolygon(minutehand,4);
 painter->restore();
}
void Widget::paintEvent(QPaintEvent*event)
{
 QPainter painter(this);
 QTimer*timer=new QTimer(this);
 timer->start(1000);
 connect(timer,SIGNAL(timeout()),this,SLOT(update()));
 QPixmap map(":/new/prefix1/timg (1).jfif");
 QRect q(0,0,1200,800);//截取這么大的面積
 QRect q2(0,0,width(),height());//放到指定大小的框中
 painter.drawPixmap(q2,map,q);
 painter.setRenderHint(QPainter::Antialiasing,true);//反走樣
 int side=qMin(width(),height());
 painter.setWindow(0,0,230,230);//原本截取放大的面積區(qū)域多大
 painter.setViewport(96,0,side,side);//映射到新的區(qū)域面積多大
 painter.translate(100,100);//重新設(shè)定坐標(biāo)原點(diǎn)
 drawhourhand(&painter);
 drawminutehand(&painter);
 drawsecondhand(&painter);
 drawclockdial(&painter);
 QString timeStr= QTime::currentTime().toString(); //繪制當(dāng)前的電子時(shí)間
 painter.setPen(Qt::white);
 painter.drawText(-20,30,80,30,0,timeStr);
 painter.setBrush(Qt::black);
 painter.drawEllipse(QPoint(0,0),3,3);//中間畫個(gè)小圓點(diǎn)
 // QTransform Transform;
 // Transform.rotate(90);
 // painter.setTransform(Transform);
 painter.drawText(-53,-30,QStringLiteral("老子利指導(dǎo),殺人先看表"));
}
void Widget::drawclockdial(QPainter*painter)
{
 hourhandpen.setColor(Qt::white);
 hourhandpen.setWidth(2.0);//設(shè)置小時(shí)刻度線為粗黑
 minutehandpen.setColor(Qt::white);
 for(int i=1;i<=60;i++)
 {
 painter->save();
 painter->rotate(6*i);
 if(i%5==0)
 {
  painter->setPen(hourhandpen);
  painter->drawLine(0,-98,0,-82);//原點(diǎn)變了
  painter->drawText(-20,-82,40,40,Qt::AlignHCenter|Qt::AlignTop,QString::number(i/5));
 }
 else
 {
  painter->setPen(minutehandpen);
  painter->drawLine(0,-98,0,-88);
 }
 painter->restore();
 }


}

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

相關(guān)文章

  • C++封裝IATHOOK類實(shí)例

    C++封裝IATHOOK類實(shí)例

    這篇文章主要介紹了C++封裝IATHOOK類的實(shí)現(xiàn)方法,對IAT的HOOK實(shí)例進(jìn)行了封裝,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C語言詳解用char實(shí)現(xiàn)大小寫字母的轉(zhuǎn)換

    C語言詳解用char實(shí)現(xiàn)大小寫字母的轉(zhuǎn)換

    這篇文章主要給大家介紹了關(guān)于C語言實(shí)現(xiàn)大小寫字母轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++11中delete和default的用法詳解

    C++11中delete和default的用法詳解

    這篇文章主要為大家詳細(xì)介紹了C++11中delete和default的具體用法,文中的示例代碼簡潔易懂,具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2023-08-08
  • 詳解C++ 引用

    詳解C++ 引用

    這篇文章主要介紹了C++ 引用的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C++深入講解初始化列表的用法

    C++深入講解初始化列表的用法

    這篇文章主要介紹了C++成員初始化列表,除了可以使用構(gòu)造函數(shù)對類成員進(jìn)行初始化之外,C++還提供了另外一種初始化的方法,叫做成員初始化列表。下面來看看文章的詳細(xì)吧,需要的朋友可以參考一下
    2022-04-04
  • C++實(shí)現(xiàn)ETW進(jìn)行進(jìn)程變動監(jiān)控詳解

    C++實(shí)現(xiàn)ETW進(jìn)行進(jìn)程變動監(jiān)控詳解

    ETW提供了一種對用戶層應(yīng)用程序和內(nèi)核層驅(qū)動創(chuàng)建的事件對象的跟蹤記錄機(jī)制。為開發(fā)者提供了一套快速、可靠、通用的一系列事件跟蹤特性。本文將利用ETW進(jìn)行進(jìn)程變動監(jiān)控,需要的可以參考一下
    2022-07-07
  • C語言編寫漢諾塔游戲

    C語言編寫漢諾塔游戲

    這篇文章主要介紹了C語言編寫漢諾塔游戲,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-11-11
  • C++多文件變量解析

    C++多文件變量解析

    大家注意不要在頭文件中定義變量,在頭文件中聲明變量。定義放在對應(yīng)的源文件中。其他地方只能用extern聲明
    2013-10-10
  • C++ 頭文件系列(set)詳解

    C++ 頭文件系列(set)詳解

    一般而言,每個(gè)C++/C程序通常由頭文件和定義文件組成。頭文件作為一種包含功能函數(shù)、數(shù)據(jù)接口聲明的載體文件,主要用于保存程序的聲明,而定義文件用于保存程序的實(shí)現(xiàn) 。
    2017-02-02
  • 淺談C++基類的析構(gòu)函數(shù)為虛函數(shù)

    淺談C++基類的析構(gòu)函數(shù)為虛函數(shù)

    本文重點(diǎn):應(yīng)該為多態(tài)基類聲明虛析構(gòu)器。一旦一個(gè)類包含虛函數(shù),它就應(yīng)該包含一個(gè)虛析構(gòu)器。如果一個(gè)類不用作基類或者不需具有多態(tài)性,便不應(yīng)該為它聲明虛析構(gòu)器。
    2015-10-10

最新評論

大同市| 吉安市| 麟游县| 遂溪县| 西林县| 怀柔区| 沅陵县| 抚宁县| 阿拉善右旗| 兴城市| 陆丰市| 工布江达县| 开原市| 江津市| 南宁市| 南安市| 分宜县| 响水县| 如东县| 金湖县| 平安县| 夏津县| 高州市| 丰台区| 营口市| 嘉祥县| 疏附县| 叶城县| 汝阳县| 琼海市| 田东县| 榆林市| 宁安市| 日土县| 宁乡县| 常州市| 淮滨县| 吉隆县| 扎赉特旗| 色达县| 双牌县|