QT实现钟表

   日期:2020-05-29     浏览:97    评论:0    
核心提示:通过QT实现简单的钟表效果如图需要准备的资源所需要的钟表样式图片如果对钟表指针同样有要求,也可以进行添加代码header.h#ifndef DIALOG_H#define DIALOG_H#include QT_BEGIN_NAMESPACEnamespace Ui { class Dialog; }QT_END_NAMESPACEclass Dialog : public QDialog{ Q_OBJECTpublic:ui

通过QT实现简单的钟表

效果如图

设计方法

首先准备好钟表样式图片,ps扣除其中指针表盘等。

建立dialog类项目。

将dialog重置大小,插入图片

在Dialog类内声明paintEvent和timerEvent(纯虚函数的利用),并在cpp中进行定义。

在paintEvent中利用QPainter类进行绘制:
首先是表盘,首先将表中心设置为新的坐标原点(translate()函数),之后利用旋转(rotate()函数)和绘针函数(fillrect()函数),每次绘针需要保存并复原坐标系(save()函数和restore()函数);

在timerevent中实现对paintEvent的重复调用(repaint()函数);

具体代码如下:

代码

header.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();
    void paintEvent(QPaintEvent * event);
    void timerEvent(QTimerEvent *event);
private:
    Ui::Dialog *ui;
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include<QPainter>
#include<QPixmap>
#include<QWindow>
#include<QTime>
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    resize(500,375);
    startTimer(1000);
}

Dialog::~Dialog()
{
    delete ui;
}
void Dialog::paintEvent(QPaintEvent *event){
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);
    QPixmap map(":/new/prefix1/cccc.jpg");
    QRect q1(0,0,500,375);
    QRect q2(0,0,width(),height());
    painter.drawPixmap(q2,map,q1);
    painter.translate(179,210);
    painter.drawEllipse(QPoint(0,0),3,3);
    //长表盘
    for(int i=0;i<12;i++){
        painter.save();
        painter.rotate(30*i);
        painter.drawLine(0,100,0,95);
        painter.restore();
    };
    //短表盘
    for(int i=0;i<60;i++){
        if(i%5){
            painter.save();
            painter.rotate(6*i);
            painter.drawPoint(0,100);
            painter.restore();
        }
    }
    //获取系统时间
    QTime time=QTime::currentTime();
    //绘制秒针
    painter.save();
    painter.rotate(6.0*time.second()-180);
    painter.fillRect(-2,-10,4,100,Qt::gray);
    painter.restore();
    //绘制分针
    painter.save();
    painter.rotate(6.0*(time.minute()+time.second()/60.0)-180);
    painter.fillRect(-3,-6,6,60,Qt::gray);
    painter.restore();
    //绘制时针
    painter.save();
    painter.rotate(30.0*(time.hour()+time.minute()/60.0+time.second()/3600.0)-180);
    painter.fillRect(-4,-4,8,40,Qt::gray);
    painter.restore();



}
void Dialog::timerEvent(QTimerEvent * event){
    repaint();
}

main.cpp

#include "dialog.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();
    return a.exec();
}

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服