1、QT的setCursor(Qt::CrossCursor) 干什么用

 ui->View->setCursor(Qt::CrossCursor);

setCursor函数用于设置窗口上的鼠标光标,Qt::CrossCursor表示设置为十字光标,十字光标可以用于在窗口中绘图或者在窗口中拖动对象。

2、QT的setMouseTracking(true)
ui->View->setMouseTracking(true); 
setMouseTracking函数用于设置窗口是否接收鼠标跟踪事件,参数为true表示窗口会接收鼠标跟踪事件,窗口会接收鼠标在窗口内部的任何移动,而不管鼠标按键是否按下。
 
3、setDragMode(QGraphicsView::RubberBandDrag);

ui->View->setDragMode(QGraphicsView::RubberBandDrag);
setDragMode函数用于设置QGraphicsView的拖拽模式,QGraphicsView::RubberBandDrag表示设置为多边形拖拽模式,即用户可以在QGraphicsView上用鼠标拖动出一个多边形框,框内的元素可以被选中。
4、mapToScene函数;
QPointF pointScene =ui->View->mapToScene(point);  
mapToScene函数用于将窗口坐标系的点映射到场景坐标系中,即将窗口中的一个点转换到场景中的点,参数point为QPoint类型,表示窗口中的一个点。
5、QT中QPoint和QPointF的区别:

QPoint和QPointF都是Qt中表示2D坐标点的类,它们的区别在于精度和浮点数支持。

  1. 精度 QPoint使用整数表示坐标点,因此其精度比QPointF低。在大多数情况下,QPoint的精度足够满足需求。 QPointF使用浮点数表示坐标点,因此其精度比QPoint高。在需要更高精度的场景下,应使用QPointF。
  2. 浮点数支持 QPoint不支持浮点数操作,因此无法直接进行缩放、旋转等操作。 QPointF支持浮点数操作,因此可以直接进行缩放、旋转等变换操作。这使得QPointF在图形绘制、动画等场景中更加方便。 总之,如果您需要更高的精度和浮点数支持,请使用QPointF。否则,使用QPoint即可。
6、Q_UNUSED(event)的作用
  Q_UNUSED(event)是Qt中一个常用的宏,用于避免编译器产生未使用变量的警告。在Qt的事件处理函数(如鼠标事件、键盘事件等)中,有时会出现一些参数被声明但未使用的情况。这时,编译器会发出“未使用变量”的警告,影响代码的可读性和美观性。 为了避免这种警告,我们可以使用Q_UNUSED(event)来告诉编译器我们不需要使用这个变量,让编译器忽略这个参数。例如,在一个鼠标事件处理函数中,我们可能只需要使用鼠标的坐标,而不需要使用事件本身:
void MyWidget::mousePressEvent(QMouseEvent *event)
{
QPoint pos = event->pos(); // 使用鼠标坐标
Q_UNUSED(event); // 告诉编译器我们不需要使用事件本身
// ...
}
 7、sceneRect()函数是干什么用的
  sceneRect()是Qt中QGraphicsScene类的一个成员函数,用于返回场景的矩形区域。该函数的返回值类型是QRectF,表示场景的矩形区域。 在Qt的图形场景中,场景是一个虚拟的平面,用于存储和管理图形项(QGraphicsItem)和视图(QGraphicsView)。场景可以看作是一块画布,而图形项则是画布上的图形元素。视图则是对场景的一种显示方式,可以将场景显示在窗口上,让用户进行交互操作。 场景的矩形区域(sceneRect)即为场景中所有图形项的边界矩形,也就是说,场景中所有图形项都应该在这个矩形区域内。当用户放大或缩小视图时,场景的矩形区域也会相应地发生变化。 可以通过QGraphicsView的setSceneRect()函数来设置场景的矩形区域,也可以通过sceneRect()函数来获取场景的矩形区域。例如:
QGraphicsView *view = new QGraphicsView;
QGraphicsScene *scene = new QGraphicsScene;
view->setScene(scene);
// 设置场景的矩形区域
scene->setSceneRect(0, 0, 800, 600);
// 获取场景的矩形区域
QRectF rect = scene->sceneRect();
   在上面的代码中,我们创建了一个QGraphicsView对象和一个QGraphicsScene对象,并将场景设置为视图的场景。然后,我们使用setSceneRect()函数设置了场景的矩形区域为(0, 0, 800, 600),表示场景的大小为800x600。最后,我们使用sceneRect()函数获取了场景的矩形区域,并将其保存在变量rect中。
8、解释下如下代码:
QGraphicsRectItem *item=new QGraphicsRectItem(rect);
item->setFlags(QGraphicsItem::ItemIsSelectable
  | QGraphicsItem::ItemIsFocusable);
 这段代码使用Qt中的图形场景框架(QGraphicsScene)创建了一个矩形图形项(QGraphicsRectItem),并将其添加到场景中。具体解释如下:

  1、QGraphicsRectItem *item = new QGraphicsRectItem(rect);

  该语句创建了一个矩形图形项,并将其指针保存在名为item的QGraphicsRectItem类型指针中。rect是一个QRectF类型的矩形,用于指定矩形图形项的位置和大小。

  2、item->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);

  该语句设置了矩形图形项的标志位。其中,ItemIsSelectable表示该图形项可以被选中,ItemIsFocusable表示该图形项可以获得焦点。 通过设置这些标志位,我们可以在需要时对矩形图形项进行选择和操作。例如,在场景中添加一个鼠标事件处理函数时,可以使用QGraphicsItem的isSelected()函数来判断该图形项是否被选中。例如:

void MyScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem *item = itemAt(event->scenePos(), QTransform());
if (item && item->isSelected()) {
// 如果该图形项被选中,则执行一些操作
}
}
 在上面的代码中,我们使用itemAt()函数获取当前鼠标位置下的图形项,然后判断该图形项是否被选中。如果被选中,则执行一些操作。
 
9、介绍下QT的Graphics View框架

  Qt的Graphics View框架是一个用于2D图形可视化的框架,可以用于创建复杂的交互式图形应用程序。该框架包括以下几个主要组件:

  1. QGraphicsItem:图形项类,是Graphics View框架的核心。该类表示场景中的一个图形元素,可以是简单的图形元素(如矩形、椭圆、线条等),也可以是复杂的图形元素(如图像、文本、路径等)。每个图形项都有一个位置、旋转角度、缩放因子等属性,可以接收鼠标、键盘等事件。
  2. QGraphicsScene:场景类,是一个虚拟的平面,用于存储和管理图形项。场景可以看作是一块画布,而图形项则是画布上的图形元素。场景可以包含多个图形项,也可以嵌套其他场景。每个场景都有一个矩形区域,表示场景中所有图形项的边界矩形。
  3. QGraphicsView:视图类,用于在窗口中显示场景。视图类负责将场景中的图形项渲染到窗口上,并提供用户与图形项交互的接口。视图可以接收用户的鼠标、键盘等事件,并将其转发给场景和图形项。
  4. QGraphicsWidget:小部件类,是基于QGraphicsItem类的一个子类,提供了更高级别的GUI元素,如按钮、复选框、滚动区域等。小部件可以像普通图形项一样添加到场景中,也可以嵌套其他小部件。 Graphics View框架的优势在于其高度的可定制性和灵活性。通过继承QGraphicsItem和QGraphicsWidget类,可以轻松地创建自定义的图形元素和GUI元素,并将其添加到场景中。同时,Graphics View框架还提供了方便的接口来实现拖放、动画、缩放、旋转等高级功能,使得开发者能够轻松地创建出具有高交互性的2D图形应用程序。
 
 
 
 
 

QT个人笔记的更多相关文章

  1. qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

    应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏 ...

  2. Qt学习笔记-Widget布局管理

    Qt学习笔记4-Widget布局管理       以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,f ...

  3. QT学习笔记(一)——Helloworld

    QT学习笔记(一)--Helloworld 一.调试的基本方法: Log调试法 --在代码中加入一定的打印语句 --打印程序状态和关键变量的值 断点调试法: --在开发环境中的对应代码行加上断点 -- ...

  4. Matlab+Qt开发笔记(一):matlab搭建Qt开发matlib环境以及Demo测试

    前言   做一些数据处理软件,使用matlab文件,.mat文件.   准备条件   安装matlab2016,发现是vs 12(是vs2011版本),Qt5.9.3是支持vs 14(是vs2015版 ...

  5. QT学习笔记1

    不准备用MFC了,想切换到QT.所以跟着网上的一个笔记学习. 1 开发环境是VS2008+QT4.7+VassistX 具体如何配置看这个帖子:http://qimo601.iteye.com/blo ...

  6. qt学习笔记(七)之数据库简介(所有支持数据库类型的列表)

    笔者最近用Qt写公司的考勤机.本来要求是要基于frameBuffer下用自己开发的easyGUI来进行上层应用开发,但是考虑到easyGUI提供的接口不是很多,就考虑用Qt来开发,顺带练练手. 废话不 ...

  7. QT 学习笔记概述

    以下笔记为在看书和实践的过程中的部分记录总结: 0. 窗口布局 1) 支持绝对布局和布局管理器布局; 2) 绝对布局不够灵活.无法自动调整大小,需要手动编写代码调整: 3) 布局管理器管理布局比较灵活 ...

  8. QT学习笔记(一)——ui的认识

    ////////////2015/08/06/////////////////// ///////////by xbw////////////////////////// //////////环境 Q ...

  9. Qt学习笔记(2)-利用StackWidget实现选项卡式页面

    学习笔记第二篇,利用Qt实现选项卡式的页面,效果如图1.1-图1.3所示.程序实现的功能是通过点击状态栏实现不同页面的切换,实际上Qt中自带有Tab选项卡式的控件,本文利用StackWidge实现类似 ...

  10. 【Qt学习笔记】窗口部件整理

    关于Qt中窗口部件的学习 今天开始学习Qt的窗口部件,领略一下Qt的神奇之处,记得2012年的那年冬天,我还学Java呢,现在基本上和Java说再见了,不过对于嵌入式的开发Qt还是举足轻重的,我想趁着 ...

随机推荐

  1. 论文解读(CAN)《Contrastive Adaptation Network for Unsupervised Domain Adaptation》

    论文信息 论文标题:Contrastive Adaptation Network for Unsupervised Domain Adaptation论文作者:Guoliang Kang, Lu Ji ...

  2. [编程基础] C++多线程入门1-创建线程的三种不同方式

    原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++11标准. 1 创建线程的三种不 ...

  3. [OpenCV实战]51 基于OpenCV实现图像极坐标变换与逆变换

    在图像处理领域中,经常通过极坐标与笛卡尔直角坐标的互转来实现图像中圆形转为方形,或者通过极坐标反变换实现方形转圆形.例如钟表的表盘,人眼虹膜,医学血管断层都需要用到极坐标变换来实现圆转方. 文章目录 ...

  4. 学习.NET MAUI Blazor(四)、路由

    Web应用程序的可以通过URL将多个页面串联起来,并且可以互相跳转.Web应用主要是使用a标签或者是服务端redirect来跳转.而现在流行的单页应用程序 (SPA) ,则通过路由(Router)来实 ...

  5. 【前端调试】- 借助Performance分析并优化性能

    欢迎阅读本系列其他文章 [前端调试]- 更好的调试方式 VSCode Debugger [前端调试]- 断点调试的正确打开方式 介绍 首先简单过一下Performance的使用,打开网页点击控制台Pe ...

  6. 《Effective C++》关于const,define等总结

    (将每一条item的总结和自己的理解给记录下来,以后有需要的话可以再回头参阅这些资料,不懂的再翻书温故.) Item 02:尽量以const ,enum,inline替换#define #define ...

  7. 深入探究Java中的对象类型变量声明操作——在声明对象时,系统究竟做了什么?

    深入探究Java中的对象类型变量声明操作--在声明对象时,系统究竟做了什么? 摘要:本文主要对Java中的对象类型变量的声明的底层原理做了探究. 目录 深入探究Java中的对象类型变量声明操作--在声 ...

  8. 【大型软件开发】浅谈大型Qt软件开发(二)面向未来开发——来自未来的技术:COM组件。我如何做到让我们的教学模块像插件一样即插即用,以及为什么这么做。

    前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...

  9. Quartz.Net 官方教程 Tutorial 1/3(Jobs 和 Trigger)

    根据官网说明 类型 概述 IScheduler 调度类核心接口 IJob 独立实现业务逻辑需要继承的任务接口 IJobDetail 给任务接口定义实例的任务说明类接口 ITrigger 触发器,设置何 ...

  10. icofx把图片转为ico图标、icofx 教程

    免费的图标编辑工具 icofx的介绍 IcoFX 是一款免费的图标编辑工具,让您轻松创建 Windows XP 和 Windows Vista 图标.在编辑区您可以轻松的预览.保存.更改您的图标.您可 ...