Qt练习之自定义时钟

       在QtProject中自学Qt时,上面有一个实例是编写时钟的,其中用到了QTimer,信号和槽以及事件的知识,是练习Qt的好例子,本人在实例上添加了秒钟的设置,从而更加像一个使用的时钟表了,下面展示一下运行结果。


       下面我来和大家分享一下,具体实现,类AnalogClock是自定义类,它继承于QWidget类,下面代码是定义类的构造函数,在其中我定义了一个QTimer类,并为Timer对象添加了信号和槽,槽函数update()每执行一次,都将会调用下面我定义的paintEvent()函数(paintEvent()函数是一个虚函数,我在自定义类中实现重写了它,函数内容将在下面为大家讲到)。


       一下都是paintEvent()函数内容,下面定义了三个Qpoint 数组,在时钟里分别代表小时,分钟,秒的走针,再定义三个QColor对象,分别为下面小时,分钟,秒走针

设置颜色,


       获得当前时间值,并创建了painter对象,translate()函数是将Vector(dx,dy)转换为坐标系统,


      下面设置画刷和画笔,分别画出小时的走针和小时的刻度盘其中rotate()函数表示顺时针旋转坐标系统,参数表示旋转的角度,drawConvexPolygon()函数表示画出凸多边形,


下面设置画刷和画笔,分别画出分钟的走针和分钟的刻度盘


       下面是本人根据小时和分钟添加的秒钟的编写,其中需要注意的是秒钟的刻度盘的需要旋转的角度,



以上是更具QtProject中的实例改编。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您讲解如何在QT中实现自定义窗口的拖拽移动。 首先,我们需要重写QWidget的mousePressEvent和mouseMoveEvent两个事件函数。 在mousePressEvent中,我们需要记录下鼠标按下时的坐标和窗口左上角的坐标,以便计算窗口移动的偏移量。 在mouseMoveEvent中,我们需要计算鼠标移动的偏移量,并将窗口的位置进行相应的调整。 以下是示例代码: ```cpp void MyWindow::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_dragPosition = event->globalPos() - frameGeometry().topLeft(); } } void MyWindow::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() & Qt::LeftButton) { QPoint newPos = event->globalPos() - m_dragPosition; move(newPos); } } ``` 在上面的代码中,m_dragPosition是一个QPoint类型的成员变量,用于记录鼠标按下时的坐标和窗口左上角的坐标的差值。 最后,我们需要在窗口的构造函数中设置窗口的样式为Qt::FramelessWindowHint,以去掉窗口的边框和标题栏。 完整的示例代码如下: ```cpp #include "mywindow.h" #include <QMouseEvent> MyWindow::MyWindow(QWidget *parent) : QWidget(parent) { setFixedSize(400, 300); setWindowFlags(Qt::FramelessWindowHint); } void MyWindow::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_dragPosition = event->globalPos() - frameGeometry().topLeft(); } } void MyWindow::mouseMoveEvent(QMouseEvent *event) { if (event->buttons() & Qt::LeftButton) { QPoint newPos = event->globalPos() - m_dragPosition; move(newPos); } } ``` 希望这个简单的示例对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值