91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 30KB
    文件類型: .tar
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2024-02-02
  • 語言: 其他
  • 標(biāo)簽: Qt??

資源簡介

這是一個(gè)比Qt學(xué)習(xí)書上例子更精進(jìn)的Demo,用Qt繪制一個(gè)時(shí)鐘,添加了秒針功能。

資源截圖

代碼片段和文件信息

#include?“clock.h“
#include?
#include?
#include?
#include?
#include?
#include?

Clock::Clock(QWidget?*parent)
????:?QWidget(parent)
{
????QTimer?*timer?=?new?QTimer(this);???//聲明一個(gè)定時(shí)器
????//update()會(huì)自動(dòng)產(chǎn)生重繪消息,調(diào)用paintEvent()
????connect(timer?SIGNAL(timeout())?this?SLOT(update()));??//連接信號槽,定時(shí)器超時(shí)觸發(fā)窗體更新
????timer->start(1000);???//啟動(dòng)定時(shí)器
????setWindowtitle(tr(“My?Clock“));??//設(shè)置窗體名稱
????resize(300?300);??//設(shè)置窗體大小
}

Clock::~Clock()
{

}

void?Clock::paintEvent(QPaintEvent?*event)
{
????//下面三個(gè)數(shù)組用來定義表針的三個(gè)頂點(diǎn),以便后面的填充
????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);??//分針顏色(第四個(gè)表示不透明度)
????QColor?minuteColor(0?127?127?191);
????QColor?secondColor(127?127?0?127);

????int?side?=?qMin(width()?height());??//繪制的范圍(寬、高中最小值)
????QTime?time?=?QTime::currentTime();???//獲取當(dāng)前的時(shí)間
????QPainter?painter(this);??????????????//聲明用來繪圖用的painter

????painter.setRenderHint(QPainter::Antialiasing);//繪制的圖像反鋸齒
????painter.translate(width()?/?2?height()?/?2);//重新定位坐標(biāo)起始點(diǎn),把坐標(biāo)原點(diǎn)放到窗體的中央
????painter.scale(side?/?300.0?side?/?300.0);//設(shè)定畫布的邊界用窗體寬高的最小值來計(jì)算時(shí)鐘的大小,防止窗體拉伸導(dǎo)致的時(shí)鐘變形以及顯示不全

????painter.setPen(Qt::red);???//填充時(shí)針,不需要邊線所以NoPen
????QString?timeStr=?QTime::currentTime().toString();?????//繪制當(dāng)前的時(shí)間
????painter.drawText(-40308030Qt::AlignHCenter?|?Qt::AlignTop?timeStr);

????painter.setPen(Qt::NoPen);???//填充時(shí)針,不需要邊線所以NoPen
????painter.setBrush(hourColor);??//畫刷顏色設(shè)定
????painter.save();??//保存painter的狀態(tài),保存的是當(dāng)前的坐標(biāo)狀態(tài),如果不保存,畫完之后坐標(biāo)以改變不方便畫下一個(gè)
????painter.rotate(30.0?*?((time.hour()?+?time.minute()?/?60.0)));?//將painter(的”視角“)根據(jù)時(shí)間參數(shù)轉(zhuǎn)移(30°?*?(小時(shí)?+?分鐘?/?60))
????painter.drawConvexPolygon(hourHand?3);??//填充時(shí)針的區(qū)域
????painter.restore();

????painter.setPen(hourColor);????//下面畫表示小時(shí)的刻度,此時(shí)要用到畫筆(因?yàn)橐獎(jiǎng)澗€)
????for?(int?i?=?0;?i?????????painter.drawLine(0?-88?0?-96);?????//寫上刻度數(shù)字
????????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);
????}
????//后面的跟前面的類似,分別繪制了分針和秒針,及相應(yīng)的刻度
????painter.setPen(Qt::NoPen);
????painter.setBrush(minuteColor);
????painter.save();
????painter.rotate(6.0?*?(time.minute()?+?time.second()?/?60.0));??//設(shè)旋轉(zhuǎn)(角度?=?6°?*?(分鐘?+?秒?/?60))
????painter.drawConvexPolygon(minuteHand?3);??//填充分針部分
????painter.restore();

????painter.setPen(minuteColor);
????for?(int?j?=?0;?j?????????if?((j?%?5)?!=?0)???????????//判斷是否能被5整除(能被5整除表示是正點(diǎn)刻度,暫不繪制)
????????????painter.drawLine(0?-92?0?-96);??//不是正點(diǎn)刻度,繪制長4個(gè)像素的直線
????????painter.rotate(6.0);???//循

評論

共有 條評論