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


相关文章
|
16天前
|
开发框架 网络协议 数据库
Qt:构建跨平台应用的强大框架
Qt:构建跨平台应用的强大框架
|
16天前
|
开发框架 自然语言处理 Linux
Qt:构建强大跨平台应用程序的框架
Qt:构建强大跨平台应用程序的框架
|
12天前
|
开发框架 编译器 C++
Qt:一个强大的跨平台C++应用程序开发框架
Qt:一个强大的跨平台C++应用程序开发框架
29 1
|
12天前
|
开发框架 Linux C++
Qt:强大的跨平台C++应用程序开发框架
Qt:强大的跨平台C++应用程序开发框架
42 3
|
15天前
|
XML 网络协议 关系型数据库
Qt框架概述与应用实例
Qt框架概述与应用实例
15 0
|
2月前
|
算法 编译器 Linux
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
25 0
|
2月前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
44 8
C++ Qt开发:QTcpSocket网络通信组件
|
15天前
|
开发框架 数据可视化 编译器
Qt的魅力:探索跨平台图形界面开发之旅
Qt的魅力:探索跨平台图形界面开发之旅
28 1
|
1月前
|
图形学 Python 容器
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)
52 0
|
1月前
qt开发使用camera类获取摄像头信息并拍照保存
qt开发使用camera类获取摄像头信息并拍照保存

推荐镜像

更多