Qt实用技巧:图形视图框架中图元将矩形边界改为不规则边界(用于选取和碰撞)

简介: Qt实用技巧:图形视图框架中图元将矩形边界改为不规则边界(用于选取和碰撞)

若该文为原创文章,未经允许不得转载

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/88869308

各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:实用技巧(点击传送门)

 

需求

       做白板中遇到图元,图元画直线返回也是矩形,让点击直线的线才选中否则不选择(虽然在boundrect内)

 

解决方法1(不行):画直线只能点击最中间,点击到了又变成整体了

       最开始设置图元选择属性为:

setFlags(ItemIsSelectable | ItemIsMovable);

      改为

setFlags(ItemIsSelectable | ItemIsMovable | ItemClipsToShape);

 

解决方法2(推荐)

       重载QGraphicsItem::share() const;

修改前

#include "LineItem.h"
#include <QPainter>
LineItem::LineItem(QObject *parent)
    : XGraphicsItem(parent)
{
}
QRectF LineItem::boundingRect() const
{
    return QRectF(_x, _y, _width, _height);
}
void LineItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);
    painter->setPen(QPen(Qt::red, 10));
    painter->drawLine(_x, _y, _x+_width, _y+_height);
}

     

       画图形后,选择boundrect局域选择(非红色直线)可移动(录制的看不到鼠标)

修改后

#include "LineItem.h"
#include <QPainter>
LineItem::LineItem(QObject *parent)
    : XGraphicsItem(parent)
{
}
QRectF LineItem::boundingRect() const
{
    return QRectF(_x, _y, _width, _height);
}
QPainterPath LineItem::shape() const
{
    QPainterPath path;
    QPainterPathStroker painterPathStroker; // 特别要注意笔宽度(其他图形类似于边框宽度)
    painterPathStroker.setWidth(10);
    path.moveTo(_x, _y);
    path.lineTo(_x+_width, _y+_height);
    return painterPathStroker.createStroke(path);
}
void LineItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    Q_UNUSED(option);
    Q_UNUSED(widget);
    painter->setPen(QPen(Qt::red, 10));
    painter->drawLine(_x, _y, _x+_width, _y+_height);
}

 

只有点击到红线上才可以移动(录制的看不到鼠标),重叠的时候,哪个图元Z轴在前就选择的是哪个

 

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/88869308


相关文章
|
4月前
|
算法 计算机视觉
基于qt的opencv实时图像处理框架FastCvLearn实战
本文介绍了一个基于Qt的OpenCV实时图像处理框架FastCvLearn,通过手撕代码的方式详细讲解了如何实现实时人脸马赛克等功能,并提供了结果展示和基础知识回顾。
178 7
|
4月前
|
文字识别 计算机视觉 开发者
基于QT的OCR和opencv融合框架FastOCRLearn实战
本文介绍了在Qt环境下结合OpenCV库构建OCR识别系统的实战方法,通过FastOCRLearn项目,读者可以学习Tesseract OCR的编译配置和在Windows平台下的实践步骤,文章提供了技术资源链接,帮助开发者理解并实现OCR技术。
201 9
基于QT的OCR和opencv融合框架FastOCRLearn实战
WK
|
2月前
|
开发框架 开发工具 C++
C++跨平台框架Qt
Qt是一个功能强大的C++跨平台应用程序开发框架,支持Windows、macOS、Linux、Android和iOS等操作系统。它提供了250多个C++类,涵盖GUI设计、数据库操作、网络编程等功能。Qt的核心特点是跨平台性、丰富的类库、信号与槽机制,以及良好的文档和社区支持。Qt Creator是其官方IDE,提供了一整套开发工具,方便创建、编译、调试和运行应用程序。Qt适用于桌面、嵌入式和移动应用开发。
WK
90 5
|
4月前
|
计算机视觉
基于QT的opencv插件框架qtCvFrameLearn实战
这篇文章详细介绍了如何基于Qt框架开发一个名为qtCvFrameLearn的OpenCV插件,包括项目配置、插件加载、Qt与OpenCV图像转换,以及通过各个插件学习OpenCV函数的使用,如仿射变换、卡通效果、腐蚀、旋转和锐化等。
73 10
|
4月前
|
C语言 C++ Windows
QT多插件通信框架CTK编译记录
本文记录了编译QT多插件通信框架CTK的过程,包括编译结果截图、部署配置、Log4Qt编译配置、参考链接和拓展资料。文中提供了详细的编译步骤和配置文件示例,以及相关的资源链接。
102 0
QT多插件通信框架CTK编译记录
|
6月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
218 1
|
5月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
143 0
|
4月前
Qt开发
Qt开发
|
4月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
108 0
|
5月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
243 2