Qt程式設計實現小時鐘
阿新 • • 發佈:2020-06-01
Hello World! 學習程式語言的最簡單最經典的小程式,當然Qt也不例外。在學習畫圖時,我覺得寫個時鐘小程式也是個比較好的開始。在之前的《Matlab及Java小時》一文中,我也從寫時鐘程式作為學習畫圖的開始。三者之間的不同點在於,matlab是通過while迴圈來進行重繪,Java和Qt事件來處理。實時顯示時鐘,都是通過改變指標與座標軸的相對位置來實現的。前兩者都是改變指標,而Qt是旋轉座標軸。具體程式碼如下:
1.widget.h檔案
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui; protected: void paintEvent(QPaintEvent *event);//新增重繪事件 }; #endif // WIDGET_H
2.main.cpp
#include <QtGui/QApplication> #include "widget.h" #include<QTextCodec> #include<QPainter> #include<QtGui> #include<QDebug> int main(int argc,char *argv[]) { QApplication a(argc,argv); QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); Widget w; w.show(); return a.exec(); }
3.widget.cpp
#include "widget.h" #include "ui_widget.h" #include<QPainter> #include<QtGui> #include<QDebug> #include<QFont> Widget::Widget(QWidget *parent) : QWidget(parent),ui(new Ui::Widget) { ui->setupUi(this); QTimer *timer = new QTimer(this);//建立一秒定時器 connect(timer,SIGNAL(timeout()),this,SLOT(update()));//訊號與槽關聯 timer->start(1000); setWindowTitle(tr("我的時鐘--designed by TW")); } Widget::~Widget() { delete ui; } void Widget::paintEvent(QPaintEvent *event) { int side = qMin(width(),height());//獲取視窗的較短邊的值 QPainter painter(this);//指定畫圖裝置 painter.fillRect(rect(),Qt::yellow);//設定背景色 painter.setRenderHint(QPainter::Antialiasing);//開啟抗鋸齒 painter.translate(width() / 2,height() / 2);//將座標移到視窗正中心 painter.scale(side / 200.0,side / 200.0);//進行縮放 QPen pen;//設定畫筆的,寬度,樣式,顏色 pen.setWidth(2); pen.setStyle(Qt::SolidLine); pen.setColor(Qt::red); painter.setPen(pen); for (int i = 0; i < 12; ++i) //畫表盤時針刻度 { painter.drawLine(87,95,0); painter.rotate(30);//將座標進行順時針選擇30度 } pen.setWidth(1); pen.setColor(Qt::black); painter.setPen(pen); for (int i = 0; i < 60; ++i) //畫表盤時針刻度 { if(i%5!=0) painter.drawLine(90,0); painter.rotate(6); } pen.setColor(Qt::black); painter.setPen(pen); QFont font("Century"); painter.setFont(font); //標時刻的數值 painter.drawText(-6,-75,tr("12")); painter.drawText(-3,80,tr("6")); painter.drawText(75,5,tr("3")); painter.drawText(-80,tr("9")); painter.drawArc(-3,-3,6,360*16);//畫中心小圓環 ///////////////////////////////////// QTime time = QTime::currentTime();//獲取當前系統時間 // qDebug()<<time.hour(); // qDebug()<<time.minute(); // qDebug()<<time.second(); //畫時針 painter.save();//在旋轉座標系前,儲存原來座標系 painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))); pen.setColor(Qt::green); pen.setWidth(4); painter.setPen(pen); painter.drawLine(0,-60); painter.restore();//在旋轉座標系後,恢復原來座標系 //畫分針 painter.save(); painter.rotate(6.0 * (time.minute() + time.second() / 60.0)); pen.setColor(Qt::blue); pen.setWidth(2); painter.setPen(pen); painter.drawLine(0,-80); painter.restore(); //畫秒針 painter.save(); painter.rotate(6.0 *time.second() ); pen.setColor(Qt::red); pen.setWidth(1); painter.setPen(pen); //秒針形狀由兩條直線和一個小圓環組成 painter.drawArc(-3,-66,360*16); painter.drawLine(0,20,-60); painter.drawLine(0,-85); painter.restore(); }
執行結果如下圖:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。