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

C++ Qt繪制時鐘界面

 更新時間:2021年12月30日 14:03:29   作者:你不懂細節(jié)  
大家好,本篇文章主要講的是C++ Qt繪制時鐘界面,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

首先來看一下效果:

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

widget.h文件

#ifndef WIDGET_H
#define WIDGET_H
 
#include<math.h>
#include<QResizeEvent>
#include<QGroupBox>
#include<QTimer>
#include<QTime>
#include<QPainter>
 
#include <QWidget>
 
namespace Ui {
class Widget;
}
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
protected:
    void paintEvent(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(new Ui::Widget)
{
    ui->setupUi(this);
    QTimer *timer = new QTimer(this);  //連接信號與槽
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(1000);
    //設置窗體名稱與大小
    setWindowTitle(tr("Clock"));
    ui->setupUi(this);
    resize(350,350);
}
 
Widget::~Widget()
{
    delete ui;
}
 
void Widget::paintEvent(QPaintEvent *event)
{
    static const QPoint hourHand[3] =
    {
        QPoint(5, 14),
        QPoint(-5, 14),
        QPoint(0, -50)
    };
    static const QPoint minuteHand[3] =
    {
        QPoint(5, 14),
        QPoint(-5,14),
        QPoint(0, -70)
    };
    static const QPoint secondHand[3] =
    {
        QPoint(5, 14),
        QPoint(-5, 14),
        QPoint(0, -80)
    };
    static const QPoint line_long[2]=
    {
        QPoint(0,100),
        QPoint(0,80)
    };
    static const QPoint line_short[2]={
        QPoint(0,100),
        QPoint(0,95)
    };
    //繪制的范圍
    int side = qMin(width(), height());
    //獲取當前的時間
    QTime time = QTime::currentTime();
    //聲明用來繪圖用的painter
    QPainter painter(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 (int i = 0; i < 12; ++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 (int j = 0; j < 60; ++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 (int j = 0; j < 60; ++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();
 
}

main.cpp文件

#include "widget.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

到此這篇關于C++ Qt繪制時鐘界面的文章就介紹到這了,更多相關C++ Qt繪制時鐘內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

灯塔市| 南通市| 新巴尔虎右旗| 石楼县| 汪清县| 漯河市| 五大连池市| 红桥区| 民丰县| 织金县| 长垣县| 阜康市| 神农架林区| 海宁市| 彭泽县| 通渭县| 靖江市| 柘荣县| 宁阳县| 专栏| 固镇县| 通城县| 渝北区| 贵定县| 辽中县| 大名县| 四子王旗| 钟山县| 汶川县| 祁东县| 华安县| 连江县| 伊春市| 九龙城区| 宁海县| 色达县| 忻州市| 剑阁县| 横山县| 丹东市| 潜江市|