首页 > 其他分享 >qt学习之事件

qt学习之事件

时间:2024-12-13 10:58:24浏览次数:7  
标签:Butterfly include qt int void 学习 事件 ev MainWindow

事件经过:事件派发(QApplication调用notify())->事件过滤(eventFilter())->事件分发(窗口事件分发器event())->事件处理(事件处理器函数,鼠标事件,键盘事件,绘图事件)
以上函数由qt控件维护,会在合适的时机执行,是虚函数可以重写。
两张蝴蝶图片实现飞舞效果

//.h文件
#ifndef BUTTERFLY_H
#define BUTTERFLY_H

#include <QPaintEvent>
#include <QWidget>

class Butterfly : public QWidget
{
    Q_OBJECT
public:
    explicit Butterfly(QWidget *parent = nullptr);
    void fly(int min, int max);
private:
    QPixmap m_pixmap;
    int m_index = 1;
    QPoint m_pt;
protected:
    void paintEvent(QPaintEvent *ev);
    void timerEvent(QTimerEvent *ev);
    void mousePressEvent(QMouseEvent *ev);
    void mouseMoveEvent(QMouseEvent *ev);
    void enterEvent(QEvent *ev);
signals:
};

#endif // BUTTERFLY_H
//cpp文件
#include "butterfly.h"

#include <QApplication>
#include <QDesktopWidget>
#include <QPainter>
#include <QRandomGenerator>
Butterfly::Butterfly(QWidget *parent)
    : QWidget{parent}
{
    m_pixmap.load(":/1");
    setFixedSize(m_pixmap.size());
    startTimer(100);
}
void Butterfly::fly(int min,int max)
{
    m_index++;
    if(m_index>2)
    {
        m_index = 1;
    }
    QString name = QString(":/%1").arg(m_index);
    m_pixmap.load(name);
    update();

    int stepX = QRandomGenerator::global()->bounded(min,max);
    int stepY = QRandomGenerator::global()->bounded(min,max);
    int curX = this->geometry().topLeft().x() - stepX;
    int curY = this->geometry().topLeft().y() + stepY;

    QDesktopWidget *desk = QApplication::desktop();
    if(curX <= desk->screenGeometry().left())
    {
        curX = desk->screenGeometry().right();
    }
    if(curY >= desk->screenGeometry().bottom())
    {
        curY = desk->screenGeometry().top();
    }
    move(curX,curY);
}

void Butterfly::paintEvent(QPaintEvent *ev)
{
    QPainter p(this);
    p.drawPixmap(rect(),m_pixmap);
}

void Butterfly::timerEvent(QTimerEvent *ev)
{
    fly(100,300);
}

void Butterfly::mousePressEvent(QMouseEvent *ev)
{
    if(ev->button() == Qt::LeftButton)
    {
        m_pt = ev->globalPos()-this->geometry().topLeft();
    }
}

void Butterfly::mouseMoveEvent(QMouseEvent *ev)
{
    if(ev->buttons()&Qt::LeftButton)
    {
        this->move(ev->globalPos()-m_pt);
    }
}

void Butterfly::enterEvent(QEvent *ev)
{
    fly(-600,600);
}

//主窗口
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "butterfly.h"

#include <QRandomGenerator>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    //去边框
    setWindowFlags(windowFlags()|Qt::FramelessWindowHint);

    //设置窗口透明
    setAttribute(Qt::WA_TintedBackground);

    //最大化
    showMaximized();
    for (int var = 0; var < 100; ++var) {
        Butterfly *win = new Butterfly(this);
        win->move(QRandomGenerator::global()->bounded(this->width()),
                  QRandomGenerator::global()->bounded(this->height()));
        win->show();
    }
}

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

标签:Butterfly,include,qt,int,void,学习,事件,ev,MainWindow
From: https://blog.csdn.net/qq_45080494/article/details/144442403

相关文章

  • 实现轮询事件
    一、需求移动端实现用户权限判断,使用 uniapp 二、实现方法1、拿到用户数据之后,通过参数进行用户身份判断,显示对应的权限在 app.vue 中调用接口查询用户信息并保存到缓存;在 home.vue 中查询身份信息并判断显示问题:调用接口拿到数据返回保存在页面加载获取身份信息之后才......
  • 江科大STM32学习:01 C语言(2)指针
    1.指针简介指针Pointer是C语言的一个重要知识点,使用灵活,功能强大指针和底层硬件联系紧密(寄存器),使用指针可操作数据的地址,实现数据的间接访问2.计算机存储机制每个区域都是一个字节,线性分配下去,每个字节对应一个地址。注:一个字节是8bitinta=0x12345678;//十六进制,八......
  • 0基础如何入门大模型? 这是我看过最全的大模型学习路线
    0基础入门大模型,transformer、bert这些是要学的,但是你的第一口不一定从这里咬下去。真的没有必要一上来就把时间精力全部投入到复杂的理论、各种晦涩的数学公式还有编程语言上,这样不仅容易让你气馁,而且特别容易磨光热情。当我们认识复杂新事物时,最舒适的路径应当是:感性认......
  • 2024-2025 20241323计算机基础与程序设计》第十二周学习总结
    这个作业属于https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01这个作业的目标:文件操作作业正文https://www.cnblogs.com/gly03/p/18604346教材学习内容总结打开文件使用fopen函数来打开一个文......
  • 大模型快速入门+学习路线,非常详细收藏我这一篇就够了!
    什么是大模型大模型,是指在人工智能领域,特别实在自然语言处理和机器学习中,拥有大量参数的深度学习模型。这些模型通过在大规模数据集上进行训练,能够学到丰富的数据表示和模式,从而在各种任务上表现出色,如文本生成,语言理解,图像识别等。大模型是具有大量参数和复杂结构的模型......
  • AI大模型学习全攻略,2025年最新,学到就是赚到!
    AI大模型学习全攻略本文详细介绍了AI大模型的学习路线,包括基础数学与编程、机器学习入门、深度学习深入、实战应用与持续学习等阶段,并推荐了相关学习资源和实战项目,最后强调了持续学习与实践的重要性。在人工智能领域,大模型以其强大的数据处理和模式识别能力,正逐渐成为推......
  • 举例说明学习数据结构和算法有什么用?
    前端开发中,虽然不像后端开发那样频繁地处理海量数据和复杂算法,但数据结构和算法的知识仍然非常重要,它能帮助你写出更高效、更优雅的代码,提升用户体验。以下是一些前端开发中数据结构和算法的应用场景示例:1.数组和链表操作:场景:虚拟列表/无限滚动。当需要展示成千上万条数据......
  • 计算机毕业设计Python+知识图谱大模型AI医疗问答系统 健康膳食推荐系统 食谱推荐系统
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • 计算机毕业设计Python+知识图谱大模型AI医疗问答系统 健康膳食推荐系统 食谱推荐系统
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • 目标检测YOLO实战应用案例100讲-基于深度学习的遥感图像目标检测
    目录前言国内外研究现状 传统的目标检测算法 基于深度学习的目标检测算法 2相关技术 2.1深度学习概述 2.2.1卷积层  2.2.2池化层 2.2.3全连接层 2.2.4激活函数 2.2.5批量标准化算法  2.3目标检测常见概念 2.3.1交并比 2.3.2非极大值抑制  ......