- 博客(204)
- 收藏
- 关注
原创 QGrphicsScen画布网格和QGrphicsItem对齐到网格
重写QGrphicsItem得itemChange方法即可实现对齐吸附到网格线,类似于ppt中得效果。
2025-05-22 14:34:04
359
原创 QWidget无边框设置
上面使用垂直布局包含QGraphicsView 时,QGraphicsView会和四周有间距。当使用布局时,默认布局和QWidget之间有空隙。注意:下面代码只能去除标题栏。可以通过qss设置窗体边框。可设置内部控件之间的间距。上面代码即可消除间距。
2025-04-29 11:16:32
225
原创 QGraphicsItem的shape和boundingRect方法
QPainterPathStroker可用于改变QPainterPath的外观,尤其是用来控制路径的描边(stroke)宽度、形状和其他属性。通过QPainterPathStroker和shape方法可以使QGraphicsItem更容易被选中。shape控制QGraphicsItem的形状,点击该shape即可选中QGraphicsItem。boundingRect为纯虚函数,必须重写,shape为虚函数。boundingRect控制QGraphicsItem的边界。
2025-04-21 16:59:15
227
原创 QT5.15.2加载pdf为QGraphicsScene的背景
必须要安装QT源码,可以看到编译器lib目录已经有pdf相关的lib文件,d是debug1.找到源码目录:D:\soft\QT\5.15.2\Src\qtwebengine\include复制这两个文件夹到编译器的包含目录中:D:\soft\QT\5.15.2\msvc2019_64\include。
2025-03-17 20:45:27
368
原创 QxOrm生成json
注意运行时要把QxOrmd.dll和exe放在同一目录。将QxOrm中上面三个目录拷贝到新建的Qt项目中。lib目录中会生成dll和lib文件。pro文件添加使用QxOrm第三方库。下载Qxorm-1.5版本。
2025-02-13 21:17:40
256
原创 拖动锚点旋转QGraphicsItem
AnchorGraphicsItem 即为锚点,可将它放置在QGraphicsItem中心的水平位置,QGraphicsItem为AnchorGraphicsItem 的父类,拖动AnchorGraphicsItem 即可旋转QGraphicsItem。
2025-02-08 17:38:03
210
原创 使用QGraphicsProxyWidget将widget绘制在QGraphicsView中
需要注意的是,在使用QGraphicsProxyWidget时,如果调用MyGraphicsItem 的paint方法无法显示QTableWidget时,需要显示调用QGraphicsProxyWidget的paint方法才能显示,或者直接调用widget的render方法来进行绘制。上面是一个例子,使用QGraphicsProxyWidget将QTableWidget绘制在QGraphicsView中。该表格可以拖动行宽和列高并且不显示滚动条,自动调整大小,也可以右键增加行或者列。
2025-01-09 21:59:23
290
原创 QPainter,QPen,QBrush详解
QPainter的构造函数传入的对象为QPaintDevice,意为在哪个设备上绘制,当前widget即为绘制对象。Qt::BrushStyle::Dense7Pattern控制画刷样式为一系列小圆点,有各种样式都可以设置。对于普通widget,可以重写paintEvent事件来进行绘制。给QPainter设置QPen和QBrush对象即可进行绘制。QBrush:画刷,控制图形的填充颜色样式。QPen:画笔,控制图形的边框轮廓。QPainter:画家。
2025-01-06 21:27:58
317
原创 QT三点绘制圆弧
第一种是使用QPaintPath绘制,moveTo方法移动到起点。求算三点构成三角形的外接圆的圆心和半径。第二种是使用drawArc绘制。
2025-01-02 09:37:25
381
原创 QGraphicsView,QGraphicsScene,QGraphicsItem坐标和事件
QGraphicsScene中的坐标为绝对坐标,重写mousePressEvent方法,可以通过QGraphicsSceneMouseEvent的scenePos方法获取鼠标点击的场景坐标。
2024-12-31 22:03:10
377
原创 undefined reference to `vtable for错误
根本原因是在使用 Q_OBJECT 宏时,Qt 的元对象系统会生成一些额外的代码(例如信号、槽和动态属性的支持)。每当使用 Q_OBJECT 宏时,Qt 的 Meta-Object Compiler (MOC) 需要自动生成一个 .moc 文件,在我这个错误中,我发现没有生成moc文件,后面发现是我没有在pro文件中加入自己写的类文件,在使用Q_OBJECT宏的类中,一定要分开写头文件和cpp文件,并且加入到pro文件中,不然编译会报错。
2024-12-25 23:29:11
313
原创 QT安装5.15之后的版本和安装后添加其他漏装模块
安装完成之后,如果发现某个模块漏装了,可以在安装目录下MaintenanceTool.exe工具添加子模块安装,不需要卸载重装。注意5.15版本需要勾选Archive筛选才可以看到。
2024-12-25 22:15:15
319
原创 pyqt和pycharm环境搭建
python安装:python3.9.13 64位(记得勾选Path环境变量)pycharm安装:community免费版安装PyQt5和PyQt5-tool。
2024-12-23 22:15:04
1114
原创 多态中虚函数调用问题
原因是父类对象尚未创建完成,因此虚函数机制(即虚表的分派)并没有完全生效。虚函数的分派机制依赖于对象的完整类型,而在构造函数阶段,C++ 认为对象的类型是父类类型。在多态中,一般通过虚函数表会调用子类重写的虚函数,然而,有一种情况调用的还是父类的虚函数,就是在父类的构造函数中调用的是父类的虚函数,无论子类是否重写。
2024-12-21 15:54:31
211
原创 QListWidget中的svg拖放到QGraphicsView中显示
要触发dropEvent方法必须先触发dragEnterEvent和dragMoveEvent方法。dragEnterEvent控制是否可以拖进去。dropEvent控制鼠标拖动放下事件。主要是涉及到以下三个方法。
2024-12-17 17:14:08
236
1
原创 使用QGraphicsItem来加载svg实现移动放大缩小
继承QGraphicsView 重写滚轮事件可以实现视图缩放。使用下面的方法可以实现QGraphicsItem的拖动功能。
2024-12-11 14:15:27
527
原创 (二)Mat类
创建一个行数为3,列数为2,图像元素是8位无符号整型,且有3个通道,图像所有像素值被初始化为(0,0,255)opencv中默认的颜色顺序为BGR。使用cout输出上述m变量:通过构造函数来创建Mat对象的方式有很多,可自行查看源代码。
2024-09-29 10:14:25
540
原创 (一)vs2022+opencv4.10环境配置
运行项目时需要将opencv_world4100d.dll和exe文件放在同一个目录,否则链接时会报找不到dll错误。在该网站下载最新的windwos环境配置文件,双击exe解压即可获取需要使用的dll和lib。库名后缀带d的为debug模式,反之为release模式。成功加载出图片即可表示环境配置成功。
2024-09-26 09:38:07
503
原创 (十六)视图变换 正交投影 透视投影
include <glad/glad.h>//glad必须在glfw头文件之前包含//GLM//4×4单位矩阵//lookat:生成一个viewMatrix//eye:当前摄像机所在的位置//center:当前摄像机看向的那个点//up:穹顶向量//参数为盒体上下左右远近//颜色//索引0, 1, 2,//uv坐标//2 VBO创建//3 EBO创建//4 VAO创建vao = 0;
2024-07-09 21:02:55
449
原创 (十五)GLM库对矩阵操作
在VS中定义transform四维矩阵变量,将这个变量与位置向量进行相乘即可进行旋转平移缩放。上述代码分别实现了对图像进行旋转平移缩放的操作。
2024-07-08 19:28:49
440
原创 (十四)向量和矩阵
标量:比如质量/温度/颜色等,没有方向,只有大小的量,称为标量向量:拥有方向跟大小的物理量/数学量为向量,比如力/速度向量特性:1.向量有方向,没有位置2.向量有大小,比如力的大小/速度的快慢。
2024-07-08 09:22:58
330
原创 (十一)Uniform
上面的例子中在vs和fs中定义了一个名为time的uniform变量,在render中获取到uniform变量的位置,给其赋值为当前系统时间,最终结果是输出一个随时间变换的彩色三角形。
2024-07-03 14:50:28
209
原创 (十)GLSL数据类型和Shader属性动态获取
和之前不同的是删除了layout (location = 0),不再从vao索引位置获取,而改为动态获取。
2024-07-02 20:33:14
257
原创 (九)绘制彩色三角形
前面的学习中并未涉及到颜色,现在打算写一个例子,在顶点着色器和片元着色器中加入颜色,绘制有颜色的三角形。在程序中,我们只给了顶点颜色分别为红绿蓝,三角形中其他部分像素颜色是通过插值得来的。
2024-07-02 16:01:11
454
原创 (八)EBO和glDrawElements
EBO(Element Buffer Object):元素缓冲对象,用于存储顶点绘制顺序索引号的GPU显存区域绑定vao之后,GL状态机就认为后续操作针对的是当前这个vao,在当前vao状态下绑定任何vbo或者ebo,都会被记录到当前vao当中。
2024-07-02 11:34:59
351
原创 (七)glDrawArry绘制
glBindVertexArray:绑定使用的VAO几何信息。接下来只需要告诉GPU,使用几何数据和材质程序来进行绘制。glUseProgram:设置使用的shader程序。材质程序:vs和fs(顶点着色器和片元着色器)first:从第几个顶点数据开始绘制。count:绘制到第几个顶点数据。几何数据:vao和vbo。
2024-07-01 21:29:59
330
原创 (六)Shader
Shader(着色器):一种运行在GPU端的类C语言GLSL,用于处理顶点数据以及决定像素片元最终着色。Shader对三角形数据的处理,分为顶点处理和片元处理,分别称为顶点着色器(Vertex Shader)和片元着色器(Fragment Shader)
2024-07-01 18:02:17
549
原创 (五)Mesh NDC VBO VAO
NDC(Normalized Device Coordinate)表示标准化设备坐标,使用-1到1之间的数字表示坐标,本质上就是比例。使用NDC可以在不同尺寸的屏幕上显示相同的图形进行缩放处理。
2024-07-01 15:22:22
403
原创 (二)图形渲染管线
1.把3D坐标转换为2D坐标(在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素)着色器(shader):图形渲染管线可以被划分为几个阶段,每个阶段将会把前一个阶段的输出作为输入,在gpu上每个阶段运行各自的小程序,这些小程序叫做着色器。上图是一个图形渲染管线的每个阶段的抽象展示,蓝色部分代表的是我们可以注入自定义的着色器的部分。2.把2D坐标转变为实际的有颜色的像素。
2024-06-28 14:42:15
239
原创 (一)opengl环境配置
推荐一个比较好的中文学习网站:https://learnopengl-cn.github.io/
2024-06-21 18:00:40
394
原创 std::funture和std::promise
在线程池中获取线程执行函数的返回值时,通常使用 std::future 而不是 std::promise 来传递返回值。这是因为线程池内部已经管理了任务的执行和结果的传递,你只需要将任务提交给线程池,并使用 std::future 来获取结果。线程池内部一般会使用一个任务队列来存储待执行的任务,并使用一个线程池管理器来调度任务的执行。当你向线程池提交任务时,线程池会选择一个空闲的线程来执行任务,并将结果存储在与任务关联的 std::future 对象中。
2024-05-16 13:26:26
380
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人