資源簡介
該代碼QT4以上測試OK,能正確顯示中文,功能能顯示陰歷,生宵,天干地支,另外加入了鐘表可作參考,可以標記日期,可以設置日期樣式, 點擊設置圖標進入詳細設置,該代碼可用于日歷控件的深入開發

代碼片段和文件信息
#include?“clock.h“
#include?
#include?
#include?
#include?
#include?
Clock::Clock(QWidget?*parent)?:
????QDialog(parent)
{
????QTimer?*timer?=?new?QTimer(this);???//聲明一個定時器
????//update()會自動產生重繪消息,調用paintEvent()
????connect(timer?SIGNAL(timeout())?this?SLOT(update()));??//連接信號槽,定時器超時觸發窗體更新
????timer->start(1000);???//啟動定時器
????setWindowtitle(tr(“My?Clock“));??//設置窗體名稱
????setWindowIcon(QIcon(“:/images/clock.ico“));
????resize(300?300);??//設置窗體大小
}
void?Clock::paintEvent(QPaintEvent?*event)
{
????//下面三個數組用來定義表針的三個頂點,以便后面的填充
????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?-70)
????};
????static?const?QPoint?secondHand[3]?=?{
????????QPoint(3?8)
????????QPoint(-3?8)
????????QPoint(0?-90)
????};//秒針
????//填充表針的顏色
????QColor?hourColor(127?0?127);??//分針顏色(第四個表示不透明度)
????QColor?minuteColor(0?127?127?191);
????QColor?secondColor(127?127?0?127);
????int?side?=?qMin(width()?height());??//繪制的范圍(寬、高中最小值)
????QTime?time?=?QTime::currentTime();???//獲取當前的時間
????QPainter?painter(this);??????????????//聲明用來繪圖用的painter
????//painter.setWindow(-100?-100?200?200);
????painter.setRenderHint(QPainter::Antialiasing);//繪制的圖像反鋸齒
????painter.translate(width()?/?2?height()?/?2);//重新定位坐標起始點,把坐標原點放到窗體的中央
????painter.scale(side?/?300.0?side?/?300.0);//設定畫布的邊界用窗體寬高的最小值來計算時鐘的大小,防止窗體拉伸導致的時鐘變形以及顯示不全
????painter.setPen(Qt::red);???//填充時針,不需要邊線所以NoPen
????QString?timeStr=?QTime::currentTime().toString();
????painter.drawText(-40308030Qt::AlignHCenter?|?Qt::AlignTop?timeStr);
????painter.setPen(Qt::NoPen);???//填充時針,不需要邊線所以NoPen
????painter.setBrush(hourColor);??//畫刷顏色設定
????painter.save();??//保存painter的狀態,保存的是當前的坐標狀態,如果不保存,畫完之后坐標以改變不方便畫下一個
????painter.rotate(30.0?*?((time.hour()?+?time.minute()?/?60.0)));?//將painter(的”視角“)根據時間參數轉移(30°?*?(小時?+?分鐘?/?60))
????painter.drawConvexPolygon(hourHand?3);??//填充時針的區域
????painter.restore();
????painter.setPen(hourColor);????//下面畫表示小時的刻度,此時要用到畫筆(因為要劃線)
????for?(int?i?=?0;?i?12;?++i)?{
????????painter.drawLine(0?-88?0?-96);
????????if?(i?==?0)??painter.drawText(-10-882020Qt::AlignHCenter?|?Qt::AlignTopQString::number(12));
????????else??painter.drawText(-10-882020Qt::AlignHCenter?|?Qt::AlignTopQString::number(i));
????????painter.rotate(30.0);
????}
????//后面的跟前面的類似,分別繪制了分針和秒針,及相應的刻度
????painter.setPen(Qt::NoPen);
????painter.setBrush(minuteColor);
????painter.save();
????painter.rotate(6.0?*?(time.minute()?+?time.second()?/?60.0));??//設旋轉(角度?=?6°?*?(分鐘?+?秒?/?60))
????painter.drawConvexPolygon(minuteHand?3);??//填充分針部分
????painter.restore();
????painter.setPen(minuteColor);
????for?(int?j?=?0;?j?60;?++j)?{??//循環60次,繪制表盤(其實可以從1開始,到59,提高一點效率)
????????if?((j?%?5)?!=?0)
????????????painter.drawLine(0?-92?0?-96);??//不是正點刻度,繪制長4個像素的直線
????????painter.rotate(6.0);???//循環60次,每次旋轉6度,所以不用save
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4033??2014-06-11?10:15??calendarwidget\calendar.qm
?????文件??????13288??2014-06-11?10:15??calendarwidget\calendar.ts
?????文件????1528372??2014-06-13?15:33??calendarwidget\calendarwidget
?????文件????????506??2014-06-10?14:55??calendarwidget\calendarwidget.pro
?????文件??????13130??2015-08-24?10:05??calendarwidget\calendarwidget.pro.user
?????文件??????13541??2014-06-20?17:26??calendarwidget\calendarwidget.pro.user.6346352.15
?????文件???????4287??2014-06-10?10:44??calendarwidget\clock.cpp
?????文件????????265??2014-06-10?10:45??calendarwidget\clock.h
?????文件?????466920??2014-06-10?10:45??calendarwidget\clock.o
?????文件????????410??2014-06-10?08:57??calendarwidget\displaybutton.cpp
?????文件????????298??2014-06-09?21:31??calendarwidget\displaybutton.h
?????文件?????193808??2014-06-10?08:57??calendarwidget\displaybutton.o
?????文件???????1170??2014-04-23?09:33??calendarwidget\images\about.png
?????文件???????9662??2010-11-14?11:59??calendarwidget\images\clock.ico
?????文件???????1424??2014-04-23?09:33??calendarwidget\images\configure.png
?????文件??????12783??2014-06-09?17:04??calendarwidget\images\go_back_today.png
?????文件???????9662??2010-11-14?11:58??calendarwidget\images\icon.ico
?????文件???????2362??2015-08-24?10:07??calendarwidget\main.cpp
?????文件?????413800??2014-06-13?15:00??calendarwidget\main.o
?????文件???????9310??2014-06-10?15:50??calendarwidget\Makefile
?????文件???????1978??2014-06-10?10:45??calendarwidget\moc_clock.cpp
?????文件?????197968??2014-06-10?10:45??calendarwidget\moc_clock.o
?????文件???????2109??2014-06-09?21:45??calendarwidget\moc_displaybutton.cpp
?????文件?????200592??2014-06-09?21:45??calendarwidget\moc_displaybutton.o
?????文件???????2727??2014-06-10?15:56??calendarwidget\moc_setbirthday.cpp
?????文件?????313696??2014-06-10?15:56??calendarwidget\moc_setbirthday.o
?????文件???????4669??2014-06-13?15:00??calendarwidget\moc_window.cpp
?????文件?????223040??2014-06-13?15:00??calendarwidget\moc_window.o
?????文件?????195576??2014-06-11?10:15??calendarwidget\qrc_resource.cpp
?????文件??????47952??2014-06-11?10:15??calendarwidget\qrc_resource.o
............此處省略12個文件信息
評論
共有 條評論