Qt事件学习案例

这篇具有很好参考价值的文章主要介绍了Qt事件学习案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

视频链接

https://www.bilibili.com/video/BV18B4y1K7Cs?p=7&spm_id_from=pageDriver&vd_source=fa4ef8f26ae084f9b5f70a5f87e9e41b

Qt5跟着视频做即可,Qt6部分代码需要改动,改动的地方注释有写

素材

百度云

链接:https://pan.baidu.com/s/158jQbAmv0Y3JipAw-tl9ng 
提取码:subw

实现一个类似屏幕保护的效果(具体效果看视频)

代码

butterfly.h文件

#ifndef BUTTERFLY_H
#define BUTTERFLY_H

#include <QWidget>


class Butterfly : public QWidget
{
    Q_OBJECT
public:
    explicit Butterfly(QWidget *parent = nullptr);
    //封装
    void fly();
    //重载fly,处理方法很多,也可以直接加上默认参数,能实现功能就行
    void fly(int min,int max);

signals:

protected:
    void paintEvent(QPaintEvent *ev);
    void timerEvent(QTimerEvent *ev);
    void mousePressEvent(QMouseEvent* ev);
    void mouseMoveEvent(QMouseEvent* ev);
    void enterEvent(QEvent* ev);


private:
    QPixmap m_pixmap;
    int m_indexPic = 1;//用于描述图片名字
    QPoint m_pt;
};

#endif // BUTTERFLY_H

butterfly.cpp文件

#include "butterfly.h"
#include <QPaintEvent>
#include <QPainter>
#include <QMouseEvent>
#include <QRandomGenerator>
#include <QApplication>

Butterfly::Butterfly(QWidget *parent)
    : QWidget{parent}
{
    m_pixmap.load(":/1");

    setFixedSize(m_pixmap.size());
    //启动定时器
    startTimer(100);
}

void Butterfly::fly()
{
    fly(10,30);
}

void Butterfly::fly(int min, int max)
{
    m_indexPic++;
    if (m_indexPic > 2)
    {
        m_indexPic = 1;
    }
    //构造图片路径
    QString name = QString(":/%1").arg(m_indexPic);
    m_pixmap.load(name);
    update();

    //蝴蝶移动的步长10 -29的随机数
    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;
    //Qt6没有视频中的方法,要换成这样写
    QRect screenRect=QGuiApplication::primaryScreen()->geometry();
    if (curX >= screenRect.right())
    {
        curX = screenRect.left();
    }
    if (curY >= screenRect.bottom())
    {
        curY = screenRect.top();
    }
    move(curX,curY);
}

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

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

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

    }
}

void Butterfly::mouseMoveEvent(QMouseEvent *ev)
{
    /*ev>buttons 返回值是一些二进制值,每个二进制值对应鼠标的一个键位,
     * 如果两个二进制按位与返回1,则是同一个键位,否则不是
    */
    if (ev->buttons() & Qt::LeftButton)
    {
        this->move(ev->globalPos() - m_pt);
    }
}

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

运行结果

Qt事件学习案例,qt,开发语言

部分代码解释:

QMouseEvent::buttons返回值是各种二进制数,每个二进制数对应的就是一个鼠标键位。如果两个二进制按位与返回1,则是同一个键位,否则不是
Qt事件学习案例,qt,开发语言文章来源地址https://www.toymoban.com/news/detail-851138.html

到了这里,关于Qt事件学习案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ Qt开发:Charts折线图绑定事件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍 QCharts 折线图的常用方法及灵活运用。 在上一篇文章中笔者介绍了关于 QChart

    2024年02月04日
    浏览(50)
  • QT学习12:QLabel实现点击事件

    主要是通过安装过滤器,实现点击事件。 事件过滤器的操作: 首先给需要添加事件过滤器的部件 注册监听对象 ; 对象名-installEventFilter(true); 重写 eventFilter(QObject *obj, QEvent *event) 函数进行处理。

    2024年02月13日
    浏览(64)
  • 【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.5 键盘事件

    本章要实现的整体效果如下: QEvent::KeyPress ​ 键盘按下时,触发该事件,它对应的子类是 QKeyEvent QEvent::KeyRelease ​ 键盘抬起时,触发该事件,它对应的子类是 QKeyEvent 本节通过两个案例来讲解这 2 个事件: 键盘按下、释放事件的基本使用 通过键盘的上下左右箭头,控制标签

    2024年02月07日
    浏览(47)
  • 【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.4 鼠标按下、移动、释放事件

    本章要实现的整体效果如下: QEvent::MouseButtonPress ​ 鼠标按下时,触发该事件,它对应的子类是 QMouseEvent QEvent::MouseMove ​ 鼠标移动时,触发该事件,它对应的子类是 QMouseEvent QEvent::MouseButtonRelease ​ 鼠标释放时,触发该事件,它对应的子类是 QMouseEvent 本节通过两个案例来讲

    2024年02月08日
    浏览(49)
  • 【Qt 学习之路】记一次安装 Qt5.12.12 安卓环境的失败案例

    安装的 Qt5.12.12 版本 Qt下载地址: https://download.qt.io/archive/qt/ 安装Qt,可能会碰到“qt.tool.perl”安装程序错误,可以看我的记录解决: Qt开发 之 安装程序错误–安装进程(qt.tool.perl)的解决办法 JDK NDK SDK openssl 注意组合套件的版本和Qt的版本要对应起来!同时,安装路径不可

    2024年02月19日
    浏览(37)
  • QT支持多种开发语言

    QT主要是一个C++应用程序框架,但它也提供了对其他一些编程语言的官方或非官方支持。以下是QT支持的一些语言版本及其特点。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.Python (PyQt)  : PyQt是QT的官方Python绑定,允许Python开发者使用QT库来创建

    2024年04月29日
    浏览(49)
  • 【Qt 学习笔记】Qt 开发环境的搭建 | Qt 安装教程

    博客主页:Duck Bro 博客主页 系列专栏:Qt 专栏 关注博主,后期持续更新系列文章 如果有错误感谢请大家批评指出,及时修改 感谢大家点赞👍收藏⭐评论✍ 文章编号:Qt 学习笔记 / 02 1. 安装包下载(网盘链接) 链接:https://pan.baidu.com/s/1t3jbYcFYFuJIfe0hPmeDmQ?pwd=duck 提取码:du

    2024年04月26日
    浏览(99)
  • 06-5_Qt 5.9 C++开发指南_Splash 与登录窗口(MouseEvent鼠标事件;注册表;加密)

    一般的大型应用程序在启动时会显示一个启动画面,即 Splash 窗口。Splash 窗口是一个无边对话框,一般显示一个图片,展示软件的信息。Splash 窗口显示时,程序在后台做一些比较耗时的启动准备工作,Splash 窗口显示一段时间后自动关闭,然后软件的主窗口显示出来。Qt有一个

    2024年02月13日
    浏览(48)
  • C++学习之路(七)C++ 实现简单的Qt界面(消息弹框、按钮点击事件监听)- 示例代码拆分讲解

    这个示例创建了一个主窗口,其中包含两个按钮。第一个按钮点击时会显示一个简单的消息框,第二个按钮点击时会执行一个特定的操作(在这个例子中,仅打印一条调试信息)。 功能描述: 创建窗口和布局: 使用 QWidget 和 QVBoxLayout 创建主窗口并设置垂直布局,将按钮放置

    2024年02月04日
    浏览(68)
  • 【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 战斗背景:做了个串口接收界面,用来接收传输过来的信号。但是光用数字显示太单调,需要用图线显示出来。 战略目标:干掉它。 战术路线:Qt 绘图可以使用 Qt Charts,先了解

    2024年02月11日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包