您的位置:首页 > 科技 > IT业 > qt-15综合实例(电子时钟)-多态重写鼠标单击和移动事件

qt-15综合实例(电子时钟)-多态重写鼠标单击和移动事件

2024/10/6 16:22:13 来源:https://blog.csdn.net/weixin_41725706/article/details/141302382  浏览:    关键词:qt-15综合实例(电子时钟)-多态重写鼠标单击和移动事件

综合实例-电子时钟

  • 知识点
  • digiclock.h
  • digiclock.cpp
  • main.cpp
  • 运行图

知识点

setWindowOpacity(0.5);//设置窗体透明度
QTimer* Timer = new QTimer(this);//新建一个定时器
connect(Timer,SIGNAL(timeout()),this,SLOT(ShowTime()));
Timer->start(1000);//启动定时器

digiclock.h

#ifndef DIGICLOCK_H
#define DIGICLOCK_H#include <QDialog>
#include <QLCDNumber>class DigiClock : public QLCDNumber
{Q_OBJECTpublic:DigiClock(QWidget *parent = nullptr);~DigiClock();void mousePressEvent(QMouseEvent*);void mouseMoveEvent(QMouseEvent*);
public slots:void ShowTime();
private:QPoint DragPosition;//保存鼠标相对电子时钟窗体左上角的偏移值bool ShowColon;//用于显示事件是否显示":"};
#endif // DIGICLOCK_H

digiclock.cpp

#include "digiclock.h"
#include <QTimer>
#include <QTime>
#include <QMouseEvent>DigiClock::DigiClock(QWidget *parent): QLCDNumber(parent)
{QPalette p = palette();p.setColor(QPalette::Window,Qt::blue);setPalette(p);setWindowFlags(Qt::FramelessWindowHint);//设置一个没有面板和窗体栏的窗体setWindowOpacity(0.5);//设置窗体透明度QTimer* Timer = new QTimer(this);//新建一个定时器connect(Timer,SIGNAL(timeout()),this,SLOT(ShowTime()));Timer->start(1000);//启动定时器ShowTime();//初始化时间显示resize(150,60);//设置窗口大小ShowColon = true;
}DigiClock::~DigiClock() {}void DigiClock::mousePressEvent(QMouseEvent *Event)
{if(Event->button() == Qt::LeftButton){DragPosition = Event->globalPos() - frameGeometry().topLeft();Event->accept();}if(Event->button() == Qt::RightButton){close();}
}void DigiClock::mouseMoveEvent(QMouseEvent *Event)
{if(Event->buttons()&Qt::LeftButton){move(Event->globalPos()-DragPosition);Event->accept();}
}void DigiClock::ShowTime()
{QTime Time = QTime::currentTime();QString Text = Time.toString("hh:mm");if(ShowColon){Text[2] = ':';ShowColon = false;}else{Text[2] = ' ';ShowColon = true;}display(Text);}

main.cpp

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

运行图

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com