QT DAY4

一、使用鼠标时间完成组件的移动

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QDebug>
#include<QMouseEvent>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void mousePressEvent(QMouseEvent *event) override;          //鼠标按下事件void mouseMoveEvent(QMouseEvent *event) override;            //鼠标移动事件private:Ui::Widget *ui;QPoint drap;       //定义Z向量
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//取消头部this->setWindowFlag(Qt::FramelessWindowHint);//qDebug()<<this->geometry().topLeft();
}Widget::~Widget()
{delete ui;
}//鼠标按下事件的实现
void Widget::mousePressEvent(QMouseEvent *event)
{qDebug()<<this->pos();        //是组件相对于整个屏幕的位置qDebug()<<event->globalPos();     //是鼠标相对于整个屏幕的位置if(event->buttons() == Qt::LeftButton){drap = event->globalPos() - this->pos();  //求出相对于屏幕坐标系中,组件左上角位置到鼠标位置的向量}else if(event->buttons() == Qt::RightButton){this->close();}
}//鼠标移动事件的实现
void Widget::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - drap);     //将组件移动到新位置,由鼠标所在向量,减去组件左上角位置到鼠标位置的向量}

二、定时器

当定时器时间超时后,就会有相关的动作进行相应,一个qt程序可以定义多个定时器,以处理不同的事情

定时器的实现有两种方式,分别是基于属性版本,和基于事件处理函数版本

1> 基于属性版本的定时器(QTimer),本质上是基于信号与槽

  • 1、实例化一个QTimer类对象
  • 2、调用该类对象中的成员函数start(毫秒数),启动一个定时器,并给定所定时长,那么该定时器会每隔给定时长后,发射timeout的信号
  • 3、当时间超时后,那么该定时器就会自动发射一个timeout的信号
  • 4、我们可以将该信号连接到自定义的槽函数中,在槽函数中处理相关逻辑
  • 5、造成的现象是:每隔给定时长后,系统会自动调用槽函数
  • 6、当不用该定时器时,可以使用该类中的成员函数stop停止一个定时器

 

2> 基于事件处理函数

  • 1、基于事件处理函数,无需引入新的类对象,使用的全部都是自己的成员函数
  • 2、调用自己的成员函数startTimer(毫秒数),启动一个定时器,启动之后,系统会每隔给定毫秒后,自动调用timerEvent函数
  • 3、timerEvent函数也是自己类中继承的相关虚函数,所以,要对该函数进行重写
  • 4、如果想要关闭定时器,只需调用自己的成员函数killTimer(定时器ID)
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QTimer>          //定时器类
#include<QTime>           //时间类#include<QTimerEvent>        //定时器事件类头文件
#include<QDateTime>           //日期时间类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();//重写定时器事件处理函数void timerEvent(QTimerEvent *event)override;private slots:void on_objStartBtn_clicked();void timeout_slot();           //自定义处理timeout信号函数的声明void on_eventStartBtn_clicked();private:Ui::Widget *ui;//实例化一个定时器指针。基于类对象版本的定时器QTimer *timer;//定义一个定时器的idint timer_id;             //基于事件处理函数的定时器
};
#endif // WIDGET_H

三、绘制事件

QT界面运行时主要调用了绘制事件,将图形化界面绘制在计算机上

而绘制事件中调用时机是:第一次展示窗口、窗口因最大化、最小化恢复正常状态、窗口因被覆盖后再次暴露、更改窗口大小、调用update函数都会调用绘制事件

实现闹钟


#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer = new QTimer(this);speecher = new QTextToSpeech(this);// 初始化组件状态ui->dateTimeEdit->setEnabled(true);ui->action->setEnabled(true);ui->stop->setEnabled(false);ui->CurrentTime->setEnabled(false);ui->edit1->setEnabled(true);// 连接信号和槽connect(timer, &QTimer::timeout, this, &Widget::timeout_slot);connect(ui->action, &QPushButton::clicked, this, &Widget::on_action_clicked);connect(ui->stop, &QPushButton::clicked, this, &Widget::on_stop_clicked);
}Widget::~Widget()
{delete ui;
}void Widget::on_action_clicked()
{// 启动定时器timer->start(1000);// 更新组件状态ui->dateTimeEdit->setEnabled(false);ui->action->setEnabled(false);ui->stop->setEnabled(true);ui->CurrentTime->setEnabled(true);ui->edit1->setEnabled(false);// 获取设定的时间alarmTime = ui->dateTimeEdit->dateTime();
}void Widget::timeout_slot()
{QDateTime currentDateTime = QDateTime::currentDateTime();QString t = currentDateTime.toString("yyyy-MM-dd hh:mm:ss");// 更新UI上的时间显示ui->CurrentTime->setText(t);// 检查是否到达设定的时间if (currentDateTime >= alarmTime) {// 播报文本speecher->say(ui->edit1->toPlainText());// 停止定时器timer->stop();// 更新组件状态ui->dateTimeEdit->setEnabled(true);ui->action->setEnabled(true);ui->stop->setEnabled(false);ui->CurrentTime->setEnabled(false);ui->edit1->setEnabled(true);}
}void Widget::on_stop_clicked()
{// 停止定时器timer->stop();// 更新组件状态ui->dateTimeEdit->setEnabled(true);ui->action->setEnabled(true);ui->stop->setEnabled(false);ui->CurrentTime->setEnabled(false);ui->edit1->setEnabled(true);
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/119310.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLMs:OpenAI官方重磅更新——新增GPT-3.5Turbo调和API更新功能

LLMs&#xff1a;OpenAI官方重磅更新——新增GPT-3.5Turbo调和API更新功能 导读&#xff1a;2023年8月22日&#xff0c;OpenAI官方发布&#xff0c;开发者现在可以使用自己的数据来定制适用于其用例的GPT-3.5 Turbo模型。GPT-3.5 Turbo的微调现在已经可用&#xff0c;GPT-4的微…

【算法与数据结构】106、LeetCode从中序与后序遍历序列构造二叉树

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;首先我们要知道后序遍历数组的最后一个元素必然是根节点&#xff0c;然后根据根节点在中序遍历数组中的…

【LeetCode-中等题】994. 腐烂的橘子

文章目录 题目方法一&#xff1a;bfs层序遍历 题目 该题值推荐用bfs&#xff0c;因为是一层一层的感染&#xff0c;而不是一条线走到底的那种&#xff0c;所以深度优先搜索不适合 方法一&#xff1a;bfs层序遍历 广度优先搜索&#xff0c;就是从起点出发&#xff0c;每次都尝…

Android GB28181客户端开发(1):GB28181协议简介

Android GB28181客户端开发(1):GB28181协议简介 公共安全视频监控联网系统信息传输、交换、控制技术要求(2016版) 源码请翻到文章结尾 介绍GB28181协议 GB28181协议是一种基于IP网络的远程视频监控系统,它定义了设备之间的通信协议和数据格式。GB28181协议的主要特点是支…

【Rust】001-基础语法:变量声明及数据类型

【Rust】001-基础语法&#xff1a;变量声明及数据类型 文章目录 【Rust】001-基础语法&#xff1a;变量声明及数据类型一、概述1、学习起源2、依托课程 二、入门程序1、Hello World2、交互程序代码演示执行结果 3、继续上难度&#xff1a;访问链接并打印响应依赖代码执行命令 三…

Collections和CollectionUtils集合操作

0.引入依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.4</version> </dependency> 一.Collections用法&#xff1a; 01、排序操作 reverse(List list)…

【摆烂之小左】Maven配置IDEA教程

Maven是什么 Maven项目对象模型(POM)&#xff0c;可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外&#xff0c;还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性&#xff0c;所以常…

数学建模:模糊综合评价分析

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 数学建模&#xff1a;模糊综合评价分析 文章目录 数学建模&#xff1a;模糊综合评价分析综合评价分析常用评价方法一级模糊综合评价综合代码 多级模糊综合评价总结 综合评价分析 构成综合评价类问题的五个…

go语言基础操作--二

a : 10str : "mike"//匿名函数&#xff0c;没有函数名字 形成一个闭包,函数定义&#xff0c;还没有调用f1 : func() { //:自动推到类型fmt.Println("a ", a)fmt.Println("str ", str)}f1()//给一个函数类型起别名 这个写法不推荐type FuncType …

Flutter状态管理 — 探索Flutter中的状态

前言 随着响应式编程的理念&Flutter被大众所了解以来&#xff0c;状态管理一直是一个引人深思的话题。如果想要学习好Flutter这样的响应式的编程框架就一定是离不开状态管理的。我遇到过很多没有了解过响应式编程框架的&#xff0c;或者从事后端开发&#xff0c;自己想用F…

docker笔记4:高级复杂安装-mysql主从复制

1.主从搭建步骤 1.1新建主服务器容器实例3307 docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORDroot \ -d…

Linux的目录结构特点

Linux的目录结构特点 1、使用树形目录结构来组织和管理文件。 2、整个系统只有一个根目录&#xff08;树根&#xff09;&#xff0c;Linux的根目录用“/”表示。 3、其他所有分区以及外部设备&#xff08;如硬盘&#xff0c;光驱等&#xff09;都是以根目录为起点&#xff0…

【已解决】激活虚拟环境报错:此时不应有Anaconda3\envs\[envs]\Library\ssl\cacert.pem。

新建虚拟环境后&#xff0c;进入虚拟环境的时候出现这样的报错&#xff1a; 此时不应有Anaconda3 envs yolov5 Library ssl cacert.pem。 但是之前装的虚拟环境也还能再次激活&#xff0c;base环境也无任何问题&#xff0c;仅新装的虚拟环境无法激活。 查遍了百度谷歌&#xff…

ThreadLocal源码剖析(简单理解)

Thread部分源码 public class Thread implements Runnable {ThreadLocal.ThreadLocalMap threadLocals null; }ThreadLocal源码,其中ThreadLocal有一个静态内部类ThreadLocalMap,这个Map不是类似二叉树类型的,只是一个普通数组,其中具体使用什么算法其实我也不太理解. 然后对…

通过ref 操作dom , 点击按钮后跳转到页面指定图片位置

滚动图片到视图 定义了一个名为 scrollToIndex 的函数&#xff0c;它接受一个参数 index。当按钮被点击时&#xff0c;这个函数会被调用&#xff0c;并根据传入的 index 值来滚动到对应的图片。 以 alt 来标记图片位置 alt“Tom” import { useRef } from "react";c…

1.(python数模)单函数读取常用文件

Python单函数读取常用文件 代码如下&#xff1a; import pandas as pd# 读取数据文件 def readDataFile(readPath): # readPath: 数据文件的地址和文件名try:if (readPath[-4:] ".csv"):dfFile pd.read_csv(readPath, header0, sep",") # 间隔符为逗…

I2C与I3C的对比

I2C与I3C的对比 电气特性 I2C 1.半双工 2.串行数据线(SDA)和串行时钟线(SCL) 3.数据线漏极开路&#xff0c;即I2C接口接上拉电阻 4.I2C总线运行速度&#xff1a;**标准模式100kbit/s&#xff0c;快速模式400kbit/s&#xff0c;快速模式plus 1Mbit/s&#xff0c;**高速模式…

机器学习:可解释学习

文章目录 可解释学习为什么需要可解释机器学习可解释还是强模型可解释学习的目标可解释机器学习Local ExplanationGlobal Explanation 可解释学习 神马汉斯&#xff0c;只有在有人看的时候能够答对。 为什么需要可解释机器学习 贷款&#xff0c;医疗需要给出理由&#xff0c;让…

无涯教程-JavaScript - WEIBULL函数

WEIBULL函数取代了Excel 2010中的WEIBULL.DIST函数。 描述 该函数返回威布尔分布。在可靠性分析中使用此分布,如计算设备的平均故障时间。 语法 WEIBULL(x,alpha,beta,cumulative)争论 Argument描述Required/OptionalXThe value at which to evaluate the function.Requir…

深入探讨Java虚拟机(JVM):执行流程、内存管理和垃圾回收机制

目录 什么是JVM&#xff1f; JVM 执行流程 JVM 运行时数据区 堆&#xff08;线程共享&#xff09; Java虚拟机栈&#xff08;线程私有&#xff09; 什么是线程私有? 程序计数器&#xff08;线程私有&#xff09; 方法区&#xff08;线程共享&#xff09; JDK 1.8 元空…