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

devtools/2024/9/22 16:21:49/

综合实例-电子时钟

  • 知识点
  • 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();
}

运行图

在这里插入图片描述


http://www.ppmy.cn/devtools/97280.html

相关文章

MySQL中处理JSON数据:大数据分析的新方向

1. 简介 1.1. 概述 在MySQL中处理JSON数据的能力是在MySQL 5.7版本中引入的,并在后续的版本中不断得到增强。这使得MySQL能够直接操作和查询JSON格式的数据,极大地扩展了其处理复杂数据结构的能力。 1.2. 主要特点 灵活性与可扩展性 :JSON允许开发者存储不规则和嵌套的数…

开始使用 AWS SAM CLI

了解如何使用 AWS SAM CLI 在本地调试 lambda 函数 欢迎来到雲闪世界。我们将学习 AWS SAM CLI 的概念。SAM 是无服务器 应用程序 模型的缩写&#xff0c;是 Amazon Web Services 提供的一个框架&#xff0c;可以利用它在本地机器上构建应用程序并将其直接部署到 AWS Lambdas。…

使用 MyBatis-Plus 的 <choose> 标签实现动态 SQL

在使用 MyBatis-Plus 进行开发时&#xff0c;我们经常需要处理复杂的 SQL 查询&#xff0c;这时动态 SQL 的功能显得尤为重要。MyBatis 提供了 <choose> 标签来帮助我们在动态 SQL 中实现条件判断。在本文中&#xff0c;我们将详细探讨如何在 MyBatis-Plus 中使用 <ch…

后端Web之Web服务器(以Tomcat为例)

目录 1.Web服务器 2.Tomcat介绍 3.Tomcat使用 4.SpringBootWeb入门解析 1.Web服务器 Web服务器是一种软件或硬件系统&#xff0c;用于托管网站和Web应用程序&#xff0c;并处理客户端&#xff08;如浏览器&#xff09;的HTTP请求。它是任何Web应用程序的基础&#xff0c;选…

Android笔试面试题AI答之Kotlin(11)

文章目录 49. Kotlin中的Sequence&#xff0c;为什么它处理集合操作更加高效&#xff1f;1. 惰性求值2. 逐个元素处理3. 避免中间集合的创建4. 支持无限序列5. 性能对比 50. Kotlin中的Coroutines与线程有什么区别&#xff1f;有哪些优点&#xff1f;一、协程与线程的区别二、协…

《Docker:实现开发环境一致性与高效部署的利器》

目录 介绍Docker 优势&#xff1a;Docker 的核心价值Docker在软件开发中的影响结语 介绍 Docker 是一个开源的应用容器化平台&#xff0c;它允许开发者将应用程序及其所有依赖项打包到一个独立的容器中。Docker 的基本概念包括&#xff1a; 镜像&#xff08;Image&#xff09;…

pyinstaller程序打包,资源嵌入exe

参考&#xff1a;https://blog.csdn.net/qq_48979387/article/details/132359366 一、参数说明 -F 最终打包为一个可执行文件。-w 取消Windows显示窗口-add-data ‘dll;dll’&#xff0c;将当前目录dll下的文件打包到可执行文件的dll中&#xff0c;最终会在解压文件的dll文件…

关于WebSocket必知必会的知识点

什么是WebSocket WebSocket是一种网络传输协议&#xff0c;可以在单个TCP连接上进行全双工通信&#xff0c;位于OSI模型的应用层。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;服务器可以主动向客户端发送消息。在WebSocket API中&#xff0c;浏览器和…