Qt写一个简单的小时钟

<hpp> 

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QPen>
#include <QBrush>
#include <Qtime>
#include <QTimer>
#include <QMenu>
#include <QMouseEvent>
#include <QToolTip>
#include <QDateTime>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    QPainter paiter;
    QPen pen;
    QBrush brush;
    QColor color;
    QFont font;
    QMenu *popmenu;
    QAction *a1;
    QAction *a2;

    QPoint mouseWindowpoistion;  // 相对于窗口
    QPoint mousedeskpoistion;   // 相对于desk
    QPoint windowpoistion;   //


protected:
    virtual void contextMenuEvent(QContextMenuEvent* event);
    virtual void paintEvent(QPaintEvent *event);
    virtual void mousePressEvent(QMouseEvent* event);
    virtual void mouseMoveEvent(QMouseEvent* event);
    virtual void mouseDoubleClickEvent(QMouseEvent* event);

};

#endif // WIDGET_H

 

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);
    timer->start(10);
    connect(timer,SIGNAL(timeout()),this,SLOT(update()));
    
    //按钮
    popmenu = new QMenu(this);
    popmenu->setStyleSheet("background-color:rgb(100,100,100)");
    a1 = new QAction(this);
    a1->setText("Exit");
    a2 = new QAction(this);
    a2->setText("Help");
    
    connect(a1,SIGNAL(triggered(bool)),this,SLOT(close()));
    setMouseTracking(true);
    
    
    this->setWindowFlag(Qt::FramelessWindowHint); //
    this->setAttribute(Qt::WA_TranslucentBackground);
    
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    paiter.begin(this);
    color.setRgb(0,0,100);
    paiter.setPen(color);
    font.setFamily("宋体");
    font.setPointSize(66);
    font.setItalic(true);
    paiter.setFont(font);
    paiter.drawText(rect(),Qt::AlignCenter,"Time");
    
    
    paiter.setRenderHint(QPainter::Antialiasing);  // 抗锯齿
    paiter.translate(width()/2,height()/2);
    paiter.setPen(Qt::white);
    int side = qMin(width(),height());
    paiter.scale(side/200,side/200);
    
    
    
    for(int i=0;i<12;++i)
    {
        paiter.drawLine(88,0,96,0);
        paiter.rotate(360/12);
    }
    
    for(int i=0;i<60;++i)
    {
        paiter.drawLine(92,0,96,0);
        paiter.rotate(360/60);
    }
    
    static const QPoint seconedHead[3]
    {
        QPoint (7,8),
        QPoint (-7,8),
        QPoint(0,-80)
        };
    QTime time = QTime::currentTime();
    paiter.save();
    paiter.setPen(Qt::NoPen);
    paiter.setBrush(QColor(50,50,50));
    paiter.rotate(6*time.second());
    paiter.drawConvexPolygon(seconedHead,3);
    paiter.restore();
    
    
    
    static const QPoint miuneHead[3]
    {
        QPoint (7,8),
        QPoint (-7,8),
        QPoint(0,-55)
        };
    paiter.save();
    paiter.setPen(Qt::NoPen);
    paiter.setBrush(QColor(150,150,150));
    paiter.rotate(6*time.minute());
    paiter.drawConvexPolygon(miuneHead,3);
    paiter.restore();
    
    
    static const QPoint hourHead[3]
    {
        QPoint (7,8),
        QPoint (-7,8),
        QPoint(0,-30)
        };
    paiter.save();
    paiter.setPen(Qt::NoPen);
    paiter.setBrush(QColor(100,100,100));
    paiter.rotate(30*time.hour());
    paiter.drawConvexPolygon(hourHead,3);
    paiter.restore();
    paiter.end();
}

void Widget::contextMenuEvent(QContextMenuEvent *event)
{
    popmenu->clear();
    popmenu->addAction(a1);
    popmenu->addAction(a2);
    popmenu->exec(QCursor::pos());
}

void Widget::mousePressEvent(QMouseEvent *event)
{
    mouseWindowpoistion = event->pos();
    
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    //    QString poster = QString ("%1%2").arg(event->pos().x()).arg(event->pos().y());
    QDateTime nowtime = QDateTime::currentDateTime();
    
    QToolTip::showText(QCursor::pos(),nowtime.toString("yyyy-mm-dd HH:mm:ss"),this);
    
    if(event->buttons() & Qt::LeftButton)
    {
        mousedeskpoistion =  event->globalPos();
        windowpoistion = mousedeskpoistion - mouseWindowpoistion;
        this->move(windowpoistion);
    }
}

void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
    if(this->isFullScreen())
        this->showNormal();
    else
        this->showFullScreen();
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
不好意思,作为AI语言模型,我无法切实操作软件开发。但我可以为您提供一些参考资料和建议,并尽可能地回答您的问题。针对您的问题,“用qt一个时钟的收获”,我认为您可能想问的是“用qt如何实现一个时钟”。当然,我不确定您在说什么时候了解了Qt,所以我将从基础开始回答您的问题。以下是一些指导步骤: 1.创建Qt项目 首先,您需要创建一个新的Qt项目。您可以使用Qt Creator这个开发工具来创建Qt项目。在Qt Creator中,选择“文件” >“新建文件或项目”,然后选择“应用程序” >“Qt Widgets应用程序”。 2.设计时钟界面 第二步,设计时钟的用户界面。时钟需要显示当前的时间并且需要一个按钮来启动/停止时钟。您可以使用Qt Designer工具创建并设计UI界面。在QT Creator中,单击“设计师”页面上的“设计UI”按钮。 3.实现时钟函数 第三步,实现时钟函数。在Qt中,您可以使用QTimer类来实现时钟功能。使用QTimer类的关键是在您的应用程序中创建一个计时器对象,然后将它连接到要执行的函数。在这个例子中,我们需要执行一个函数来获取并显示当前时间。您可以使用QDateTime类来获取当前时间或日期。当然您也可以使用其他库来获取时间。 4.连接时钟按钮 第四步,连接时钟按钮。在时钟程序中,我们需要一个按钮来启动/停止计时器。您可以在Qt Designer中将一个按钮拖动到UI界面并命名为“Start/Stop”。然后在Qt Creator的Edit Signal/ Slot功能中,建立一个连接,这个连接把按钮的clicked(单击)信号连接到时钟功能函数的启动或停止,来实现计时器的启动/停止。 5.编译并运行应用程序 最后一步,编译并运行您的应用程序。在Qt Creator中,单击“构建”>“运行”,或使用快捷键“CTRL + R”。如果一切正常,您的应用程序将编译和启动。使用时钟按钮来启动/停止计时器,应用程序将显示当前时间。 希望这些步骤能帮助您了解如何用Qt实现一个简单时钟,祝您好运!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值