C++Qt繪制時鐘界面_第1頁
C++Qt繪制時鐘界面_第2頁
C++Qt繪制時鐘界面_第3頁
C++Qt繪制時鐘界面_第4頁
C++Qt繪制時鐘界面_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第C++Qt繪制時鐘界面首先來看一下效果:

大概就是這樣子,需要注意的是,這里你需要創(chuàng)建一個基類為Widget的界面來繪制時鐘,以至于后期你想把這個時鐘放到任意一個界面,你只需要在那個界面的ui里面添加一個widget,然后將它提升為這個時鐘界面,并設定它的大小。

widget.h文件

#ifndefWIDGET_H

#defineWIDGET_H

#includemath.h

#includeQResizeEvent

#includeQGroupBox

#includeQTimer

#includeQTime

#includeQPainter

#includeQWidget

namespaceUi{

classWidget;

classWidget:publicQWidget

Q_OBJECT

public:

explicitWidget(QWidget*parent=0);

~Widget();

protected:

voidpaintEvent(QPaintEvent*event);

private:

Ui::Widget*ui;

#endif//WIDGET_H

widget.cpp文件

#include"widget.h"

#include"ui_widget.h"

Widget::Widget(QWidget*parent):

QWidget(parent),

ui(newUi::Widget)

ui-setupUi(this);

QTimer*timer=newQTimer(this);//連接信號與槽

connect(timer,SIGNAL(timeout()),this,SLOT(update()));

timer-start(1000);

//設置窗體名稱與大小

setWindowTitle(tr("Clock"));

ui-setupUi(this);

resize(350,350);

Widget::~Widget()

deleteui;

voidWidget::paintEvent(QPaintEvent*event)

staticconstQPointhourHand[3]=

QPoint(5,14),

QPoint(-5,14),

QPoint(0,-50)

staticconstQPointminuteHand[3]=

QPoint(5,14),

QPoint(-5,14),

QPoint(0,-70)

staticconstQPointsecondHand[3]=

QPoint(5,14),

QPoint(-5,14),

QPoint(0,-80)

staticconstQPointline_long[2]=

QPoint(0,100),

QPoint(0,80)

staticconstQPointline_short[2]={

QPoint(0,100),

QPoint(0,95)

//繪制的范圍

intside=qMin(width(),height());

//獲取當前的時間

QTimetime=QTime::currentTime();

//聲明用來繪圖用的painter

QPainterpainter(this);

//繪制的圖像反鋸齒

painter.setRenderHint(QPainter::Antialiasing);

//重新定位坐標起始點,把坐標原點放到窗體的中央

painter.translate(width()/2,height()/2);

//在表盤內(nèi)添加文字(任意)

//painter.drawText(-75,-120,100,170,Qt::AlignRight,tr("ROLEX"));

//設定畫布的邊界

painter.scale(side/200.0,side/200.0);

//填充邊線設為黑色,也可以設置為NoPen

painter.setPen(Qt::black);

//畫刷顏色設定

painter.setBrush(Qt::black);

//保存painter的狀態(tài)

painter.save();

//設置painter的旋轉(zhuǎn)角度

painter.rotate(30.0*((time.hour()+time.minute()/60.0)));

//填充時針的區(qū)域

painter.drawConvexPolygon(hourHand,3);

painter.restore();

painter.setPen(Qt::black);

//12個個刻度循環(huán)

for(inti=0;i++i)

painter.drawLine(line_long[0],line_long[1]);

painter.rotate(30.0);

//繪制分針轉(zhuǎn)角、刻度

painter.setPen(Qt::black);

painter.setBrush(Qt::black);

painter.save();

painter.rotate(6.0*(time.minute()+time.second()/60.0));

painter.drawConvexPolygon(minuteHand,3);

painter.restore();

painter.setPen(Qt::black);

for(intj=0;j++j)

if((j%5)!=0)

painter.drawLine(line_short[0],line_short[1]);

painter.rotate(6.0);

//繪制分針轉(zhuǎn)角、刻度

painter.setPen(Qt::black);

painter.setBrush(Qt::black);

painter.save();

painter.rotate(6.0*(time.minute()+time.second()/60.0));

painter.drawConvexPolygon(minuteHand,3);

painter.restore();

painter.setPen(Qt::black);

for(intj=0;j++j)

if((j%5)!=0)

painter.drawLine(line_short[0],line_short[1]);

painter.rotate(6.0);

//繪制秒針轉(zhuǎn)角

painter.setPen(Qt::black);

painter.setBrush(Qt::black);

painter.save();

painter.rotate(6.0*time.second());

painter.drawConvexPolygon(secondHand,3);

painter.restore();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論