首页 > 其他分享 >Qt图形视图框架事件传递顺序

Qt图形视图框架事件传递顺序

时间:2023-09-07 21:45:01浏览次数:44  
标签:函数 MyItem 视图 事件 图形 图元 Qt

 

全文链接:http://www.fearlazy.com/index.php/post/111.html

 Qt为我们提供的图形视图框架真的是非常好用,它通过分解出视图、场景和图元降低了我们绘制图形的难度。它提供了强大图元控制能力,如快速查找图元、检测图元位置、检测图元碰撞等。除此以外图形视图框架还有一个很强大的优点就是提供了很好的交互性,这让原本是“死”的图形变“活”了。

    说到交互就必须要说事件,事件就是人与电脑,人与软件交互的纽带。那么图形视图框架中的事件要如何获取,它又是如何传递的呢?

    要回答上述问题,首先需要明确一点就是框架中的三要素视图、场景和图元各自都有自己的事件。Qt为我们提供了很多的事件的虚函数,通过重载这些函数我们就能获取到对应的事件,进而进行处理。如下图为部分事件函数

 

    既然视图场景和图元各自都有事件函数,那么事件是如何在几者之间传递呢?可以通过实验了测试一下。以下我们以鼠标按下事件为例。

    1.首先分别从QGraphicsView、QGraphicsScene和QGraphicsItem派生三个类MyView、MyScene和MyItem。 其中MyItem需要实现boundingRect和paint函数,paint里就绘制一个矩形即可。

    2.三个子类都重载mousePressEvent这个函数,函数中只输出一句话表示程序执行到此,然后调用父类对应的该函数。

    

    

    3.创建视图、场景和图元对象并设置好。运行程序点击图元,看信息输出的情况:

 

  从输出结果可以看出事件传递的顺序是视图-->场景-->图元。需要注意的是调用父类的事件处理接口不能省略,否则事件到此就停止传递了。如删掉MyView事件处理函数中的QGraphicsView::mousePressEvent(event)场景和图元都不会接收到鼠标按下的事件。

   4.最后再验证包含子图元情况的事件顺序,是先到父图元还是先到子图元。在之前的基础上再创建一个MyItem对象,设置其父对象为第一个MyItem。

 

    由于MyItem的形状一样大,所以看起来和原来一样,直接看输出信息:

 

从结果可以看出事件先传递到子图元上然后再到父图元。

 

作者:fearlazy 一个入行5年的程序员新人。 文章内容仅代表个人观点,如有雷同请为我点个赞吧!

 

from:  https://blog.csdn.net/can3981132/article/details/87398203

标签:函数,MyItem,视图,事件,图形,图元,Qt
From: https://www.cnblogs.com/im18620660608/p/17686130.html

相关文章

  • qt程序调用cuda-11.7,cmake编译时,提示:"CMakeCUDACompilerId.cu" failed. Compiler:
    报错显示:Running/home/wc/software/cmake-3.26.3-linux-x86_64/bin/cmake/home/wc/work/junke_src/missile-sim'-GCodeBlocks-UnixMakefiles'in/home/wc/work/junke_src/build/debug.CMakeErrorat/home/wc/software/cmake-3.26.3-linux-x86_64/share/cmak......
  • nicegui:Python 图形界面库,简单好用
    前言在现代计算机应用程序开发中,图形用户界面(GUI)是用户与程序交互的重要组成部分。然而,GUI开发往往需要大量的代码和复杂的布局,给开发者带来了一定的挑战。在本篇博文中,将介绍nicegui,它是一个简单易用的图形用户界面库,提供了一种简化GUI开发的方式,使开发者能够更快速地构建吸......
  • Qt QDateTime类型加减计算
    在Qt框架中,QDateTime类提供了一系列可以进行日期和时间的加减计算的方法,可用于处理日期和时间相关的问题。一些常用的方法如下:1.QDateTime::addDays(intdays):在当前时间的基础上增加指定天数后的日期和时间。1QDateTimecurrentDateTime=QDateTime::currentDateTime();2Q......
  • QT QDateTime 计算两个日期时间差
    1、计算两个日期天数差1QDateTimetime1=QDateTime::fromString("2020-11-2616:40:02","yyyy-MM-ddhh:mm:ss");2//QDateTimetime2=QDateTime::fromString("2020-11-2616:43:02","yyyy-MM-ddhh:mm:ss");3QDateTimetime2=QD......
  • oracle 对物化视图的使用中遇到问题
    1.建立一个简单的物化视图createtablestudent_info(snonumber(10)constraintpk_si_snoprimarykey,snamevarchar2(10),sexvarchar2(2),create_datedate);CREATEMATERIALIZEDVIEWmv_student_infoBUILDIMMEDIATEREFRESHF......
  • RK3568开发笔记(七):在宿主机ubuntu上搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo
    前言  在之前的博文中已经搭建好了一个比较完善的ubuntu宿主机,都很完善了但是发现没有Qt交叉编译开发环境,所以还需要搭建一套Qt交叉编译开发环境。<br>补充说明  本篇是基于《RK3568开发笔记(三):RK3568虚拟机基础环境搭建之更新源、安装网络工具、串口调试、网络连接、文件传......
  • RK3568开发笔记(七):在宿主机ubuntu上搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo
    前言  在之前的博文中已经搭建好了一个比较完善的ubuntu宿主机,都很完善了但是发现没有Qt交叉编译开发环境,所以还需要搭建一套Qt交叉编译开发环境。 补充说明  本篇是基于《RK3568开发笔记(三):RK3568虚拟机基础环境搭建之更新源、安装网络工具、串口调试、网络连接、......
  • QT通过QBreakpad捕捉崩溃
    最近在公司项目上遇到程序运行时崩溃,也不好在log日志中定位。查找了资料发现,谷歌的一个开源项目Breakpad,统一了这三平台win、linux、mac生成dump的方式来捕捉崩溃。大致研究了一下,主要依赖一个静态库和几个头文件,我这边编译出来放到网盘上大家自行使用。链接:https://pan.baidu......
  • Unity UGUI的ScrollRect(滚动视图)组件的介绍及使用
    UnityUGUI的ScrollRect(滚动视图)组件的介绍及使用1.什么是ScrollRect组件?ScrollRect(滚动视图)是UnityUGUI中的一个常用组件,用于在UI界面中创建可滚动的区域。通过ScrollRect组件,可以实现在有限的空间内显示大量的内容,并且可以通过滑动手势来浏览内容。2.ScrollRect组件的工作......
  • Qt3D曲面正反面贴图例程
    主要利用GLSL中的内置变量gl_FrontFacing区分正反面。下面是正面反面效果图:头文件:classQOpenGLShaderProgram;classQOpenGLTexture;//---------------------------------------------------------------------------------------//显示图片//-----------------------......