首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

重新实现mousePressEvent后无法在QGraphicsView中拖动项目

问题描述: 重新实现mousePressEvent后无法在QGraphicsView中拖动项目。

解答: 在QGraphicsView中拖动项目通常需要重新实现mousePressEvent、mouseMoveEvent和mouseReleaseEvent这三个事件函数。其中,mousePressEvent用于捕捉鼠标按下事件,mouseMoveEvent用于捕捉鼠标移动事件,mouseReleaseEvent用于捕捉鼠标释放事件。

如果重新实现了mousePressEvent后无法在QGraphicsView中拖动项目,可能是因为没有正确处理鼠标事件。以下是一个可能的解决方案:

  1. 在mousePressEvent中,首先调用父类的mousePressEvent函数,以确保其他事件处理逻辑正常执行。
代码语言:txt
复制
void MyGraphicsView::mousePressEvent(QMouseEvent *event)
{
    QGraphicsView::mousePressEvent(event);
    // 其他事件处理逻辑
}
  1. 在mousePressEvent中,判断是否按下了鼠标左键,并且鼠标指针下有可拖动的项目。如果满足条件,将拖动标志设置为true,并保存鼠标按下时的位置。
代码语言:txt
复制
void MyGraphicsView::mousePressEvent(QMouseEvent *event)
{
    QGraphicsView::mousePressEvent(event);
    
    if (event->button() == Qt::LeftButton && itemAt(event->pos()) != nullptr)
    {
        m_dragging = true;
        m_lastPos = event->pos();
    }
}
  1. 在mouseMoveEvent中,判断是否处于拖动状态。如果是,计算鼠标移动的偏移量,并将场景中的项目按照偏移量进行移动。
代码语言:txt
复制
void MyGraphicsView::mouseMoveEvent(QMouseEvent *event)
{
    QGraphicsView::mouseMoveEvent(event);
    
    if (m_dragging)
    {
        QPointF offset = event->pos() - m_lastPos;
        m_lastPos = event->pos();
        
        QGraphicsItem *item = itemAt(event->pos());
        if (item != nullptr)
        {
            item->moveBy(offset.x(), offset.y());
        }
    }
}
  1. 在mouseReleaseEvent中,将拖动标志设置为false,表示拖动结束。
代码语言:txt
复制
void MyGraphicsView::mouseReleaseEvent(QMouseEvent *event)
{
    QGraphicsView::mouseReleaseEvent(event);
    
    m_dragging = false;
}

通过重新实现这三个事件函数,可以实现在QGraphicsView中拖动项目的功能。

推荐的腾讯云相关产品:腾讯云服务器(CVM)、腾讯云对象存储(COS)、腾讯云数据库(TencentDB)。

腾讯云服务器(CVM):https://cloud.tencent.com/product/cvm 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb

相关搜索:无法在Laravel 5.6中实现更新项目在列表中添加项目后无法更新JComboboxJssor Slider -图像滑块(无法拖动图片)在重新创建滑块后不起作用是否可以在列表视图构建器中通过在Flutter中拖动来对项目进行重新排序?尝试重新创建项目时,"无法在工作区中创建项目内容"在项目导航器中选择后,无法在Xcode中查看文件运行项目后无法在intellij中打开静态页(Spring mvc)尽管使用extraData - React Native,但无法在删除最后一个项目后重新呈现FlatListandroid -在Nougat中拖放后无法单击RecyclerView项目(Android7.0)在Phaser 3中重新启动场景后,键盘输入无法正常工作删除文本后无法在元素中重新追加文本(使用JavaScript append) (使用JavaScript remove)在Mgmt Studio中修改数据库后重新导入/更新SQL Server数据库项目在删除响应变量以实现标准化后,如何将其重新合并到数据框中?如何在移除列表视图中的项目后,通过单击项目中的删除按钮来重新加载片段,这些项目的代码在adaptor类中?如何在收到来自网络的新项目后在flutter.io中重新绘制widgets的网格?Qt:如何使用自定义模型在QListView中实现简单的内部拖放来对项目进行重新排序在ggplot2中重新排序图例后,我无法阻止出现第二个图例在将angular更新到版本^12后,无法在zone.d.ts文件中重新声明块范围的变量'Zone‘Qt -在qml资源中添加10Mb文件后,为什么Visual Studio 2019无法再编译我的项目?在VS中编辑克隆的存储库后,如何修复“尝试运行项目时出现错误:无法启动程序'program.exe‘请求不受支持”
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Qt官方示例-拖放机器人

❝拖放机器人示例演示如何在QGraphicsItem子类实现拖放,以及如何使用Qt的Animation Framework动画化项目。❞ ?   ...(当鼠标拖动项目时释放鼠标按钮时)。 我们将其重置dragOver为false,分配机器人部件的新颜色,然后调用update()。   ...为了支持此操作,对其dragEnterEvent()的重新实现将检查拖动对象是否包含图像数据,如果包含,则接受该事件。否则,我们将退回到基本RobotPart实现。...我们检查拖动对象是否包含图像数据,如果包含,则将其存储为成员pixmap并调用update()。此像素图用于paint()实现。   ...它声明了必需的boundingRect()和paint()函数,并重新实现mousePressEvent(),mouseMoveEvent()和mouseReleaseEvent()。

4.8K41

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

程序的item能够水平拖动拖动的同一时候图标大小会渐变,中间最大,两边渐小。...以下详细的源文件:myscene.h与myscene.cpp相对简单,就实现了一个功能 myscene.h #ifndef MYSCENE_H #define MYSCENE_H #include <...scene; MyScene *scene; //instead of (NodeUI *nodeui;)&(QPointF nodeUiPos;) //眼下弃用,因为QMap的顺序无法人为设定...//推断根据是当前单击的nodeui对象的pos与存储nodeUiPosListsd的位置比較,相等则为单击 bool MainWindow::isNodeUiClicked() { int...w.showFullScreen(); return a.exec(); } 大概都写了注解了,事实上看看一个名称也该大概了解其作用,写这程序时遇到的问题都记录在了前一篇qt学习笔记(四)

1.7K10
  • 基于Qt的流程设计器(一)

    一:先来看一下界面的截图: 说明: 拖动节点的时候,与该节点相关的箭头连线也会跟着调整; 用户可以使用鼠标从一个节点拖出一个箭头到另一个节点(鼠标空白区域点击一下,拖出的箭头消失) 这三个图标,手型图标处于选中状态的时候...,节点可以拖动, 箭头图标处于选中状态的时候,可以使用鼠标绘制连线箭头 最后一个图标,用于画布上创建一个节点方框 二: 关键代码文件如下图(用红框框住的为关键代码文件) 其他文件均为辅助代码文件(有些文件的代码没有用到...) 三: CustomView类是我们的绘图面板,这个类继承自QGraphicsView 在这个类的构造函数,我们创建了他的QGraphicsScene 并设置了它的大小(这也是为什么我们的绘图板有滚动条的原因...继承自QGraphicsRectItem 在这个类型,我们重载了itemChange函数,代码如下 当当前方框节点移动,与这个节点相关的箭头都要跟着移动 Arrows就是与当前方框节点有关的箭头...八: 来看一下CustomRect的MousePressEvent的代码 在这个代码, 我们先为全局标志ScenClickFlag赋值, 这个标志着当前点击的是一个方框节点,还是点击画布的空白处了

    1.7K60

    C++ Qt开发:Charts折线图绑定事件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,Qt我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QCharts折线图的常用方法及灵活运用...在上一篇文章笔者介绍了关于QCharts绘图组件的详细使用方法及接口,本章将继续为绘图组件绑定事件,通常在未绑定事件的图形上所有的元素都是被禁用状态的,我们无法直接操作这些功能,通过绑定图形组件事件将可以实现对图形的各种操作模式...首先,我们来实现动态显示与隐藏线条功能,还是使用之前的代码这里稍作改进增加一个十五分钟负载统计,接着我们MainWindow主构造函数通过markers()得到所有的标签,然后先调用disconnect...为了实现点击隐藏与显示特定线条,我们可以这样来实现,首先通过marker得到被点击案例的指针,通过marker->type()来检查类型是否为LegendMarkerTypeXY,如果是就通过根据数据可见性来设置透明度...以下是这些事件处理函数的简要说明: 鼠标按下事件 (mousePressEvent): 当鼠标按下时触发。该函数,你可以处理鼠标按下时的逻辑,如获取鼠标坐标、进行拖拽等。

    40510

    C++曲线图折线图QT窗体绘图excel数据导入

    C++曲线图折线图Qt窗体绘图excel数据导入 曲线图可自由切换相同布局窗口中,Excel数据导入生成曲线图,根据需要可修改为直方图,饼图,散点图等。...运行结果如下: ​编辑 Qt Charts基于Qt的Graphics View架构,其核心组件是QChartView 和 QChart QChartView是显示图标的视图,基类为QGraphicsView...QChart的基类是QGraphicsltem 类的继承关系: 创建项目:.pro文件添加:QT += charts 步骤: 第一步:安S,QT 第二步:新建项目 第三步:导入代码文件 第四步...oDeltaPos.y()); m_oPrePos = pEvent->pos(); } __super::mouseMoveEvent(pEvent); } void QtChartZoomView::mousePressEvent...m_bMiddleButtonPressed = true; m_oPrePos = pEvent->pos(); this->setCursor(Qt::OpenHandCursor); } __super::mousePressEvent

    1.1K40

    【QT】图形视图、动画框架

    多个视图可以查看一个场景,场景包含了各种几个形状的图像项。框架包含一个事件传播架构,提供了和场景的图形项进行精确的双精度交互能力,如将场景时间传递给图形项,也可以管理图形项目之间的事件传播。...::resize() //重置视图大小 QGraphicsView::show() //显示视图 QGraphicsView::setDragMode() //拖动场景,常以QGraphicsView...::ScrollHandDrag为参数使光标变为手掌形状,从而拖动场景,若以QGraphicsView::RubberBandDrag为参数可在视图上使用鼠标拖出橡皮筋框来选择图形项 示例: #include...视图的坐标 视图的坐标就是部件的坐标,视图坐标的每一个单位对应一个像素,原点总是QGraphicsView视口的左上角,而右下角是宽高。所有的鼠标事件和拖放事件都是使用视图坐标来接收的。...如果没有重新实现shape()函数,则它会调用默认boundingRect()函数返回一个简单的矩形。 2.重写collidesWithItem()来提供一个自定义的图形碰撞算法。

    1.5K30

    Qt官方示例-拖动图标

    拖动图标示例显示了如何在同一应用程序的小部件之间以及不同应用程序之间拖放图像数据。   使用拖放的许多情况下,用户开始从特定的窗口小部件拖放,并将有效负载拖放到另一个窗口小部件上。...在此示例,我们将QLabel子类化以创建用作拖动源的标签,并将其放置同时充当容器和放置站点的QWidget。   另外,当发生拖放操作时,我们希望发送的不仅仅是图像。...我们还希望发送有关用户图像单击位置的信息,以便用户可以将其精确放置放置目标上。这种详细程度意味着我们必须为数据创建自定义MIME类型。...(QMouseEvent *event) override; };   由于QLabel类提供了图标所需的大部分内容,因此我们只需要重新实现QWidget::mousePressEvent()即可提供拖放功能...我们通过重新实现QWidget::mousePressEvent()并设置一个QDrag对象来做到这一点。

    1.6K31

    QT实现机器视觉最常用的图像查看器(源码)

    机器视觉行业中最常见的控件就是图像查看器了,使用QT实现其实也非常简单,我出的项目【降龙:算法软件框架】和【重明:工业相机二次开发】中都有用到。...如上图是重明项目的软件界面,中间的就是图像查看器。 本文将图像查看器的代码给大家拆解独立出来,并和大家讲解一下图像查看器的实现原理。完整代码工程公众号【周旋机器视觉】后台发送【十二生肖控件】获取。...实现思路2就是借助QT的视图模型框架,通过重写自己的QGraphicsView类,就可以轻松实现一个如上文展示效果的图像查看器。 我们采用更为方便,也更为理解的方案2来实现。...所以想实现我们文章开头的预期效果,并不是这么几行就可以搞定的,我们需要重写QGraphicsView类,实现我们预期的自定义功能,例如双击鼠标事件,背景绘制等等。...4、重写QGraphicsView类 对于如何重写,我们文章里就不做详细说明了,代码就是最好的介绍。

    36110

    如何基于Python代码实现高精度免费OCR工具

    技术点丰富 Textshot这个项目虽然只有短短的139行代码,但是,却涉及Python多个方面的知识应用, UI开发 截图工具开发 后端引擎调用 通过这短短的项目,你不仅可以了解如何利用PyQt5实现一个用户界面...因此,Textshot虽然工程不大,却是一个非常完备、值得学习的项目。 本文就来剖析这个项目的源代码,教你一步一步实现自用且永久免费的截图&OCR工具!...因此,Textshot只是实现了一款截图工具,起到前后端的串联作用,OCR识别算法方面并没有做任何工作。...Textshot通过调用PyQt5并继承QWidget来实现鼠标框选过程的一些方法来获取框选的起点和终点。...回顾一下Textshot的项目,我们会发现截图坐标范围内的图像、OCR识别只需要2行代码,大多数都是围绕获取窗口起点和终点坐标开发。

    3.7K10

    Qt的QChartView实现缩放和放大功能

    QChartView开启鼠标拖动放大功能: ui->wdChart->setRubberBand(QChartView::RectangleRubberBand); 开启拖动鼠标区域自动放大,鼠标右键点击自动缩小...恢复的话重新设置下轴的最大最小范围setRange即可。这里介绍下鼠标左键单击实现恢复的办法: 自定以一个MyChartView,继承自QChartView。...这里巧妙实现了下。原理很简单,如果是鼠标拖动的话mouseMoveEvent把is_Pressed_清掉。...把qcustomplot.cpp和qcustomplot.h拷贝到工程目录下,项目中点右键添加现有文件,把两个文件加入工程。...这时pro文件会添加上qcustomplot.cpp和qcustomplot.h,如果Qt版本5.0以上,需要在.pro文件的QT变量加上printsupport,QT += printsupport

    3.5K40

    C++ Qt开发:Charts绘图组件概述

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,Qt我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QCharts二维绘图组件的常用方法及灵活运用...其中QChart的继承关系如下图所示; 如果要在项目中使用绘图模块,则必须在项目的*.pro文件引用Qt+=charts并在主函数包含绘图头文件,如下所示; #include ...实际使用,可以根据需要查阅官方文档获取更详细的信息。...接着,我们来实现一个简单的绘图功能,MainWindow构造函数我们首先通过new QChart()创建一个图表类,接着通过使用ui->graphicsView->setChart方法可以将QChart...将生成的随机整数添加到两个曲线序列,分别对应一分钟和五分钟的负载。 X轴上递增,以模拟时间的推移。 清空图例和赋予数据: 获取序列的指针。 清空曲线序列的数据,以便重新加载新的数据。

    80110

    其实,AI 也会糊弄你…

    下面的对话 Q 代表我提的问题,A 是 AI 的回答。 我遇到的问题是这样的: QWidget 上拖动鼠标选择文字,会同时拖动窗口。...于是有了如下对话: Q:我一个 widget上选择文本,为什么会导致QMainWindow移动 A: Qt ,当你一个 widget 上选择文本时,可能会触发鼠标事件,这可能会导致父级窗口(如...使用事件过滤器会导致本身的 widget 也无法接收到鼠标事件。让我来提供一个更好的解决方案。...你可以子 widget 重写 mousePressEvent 函数,并在其中调用 ignore 函数来阻止事件传递给父级窗口。...widget 重写 mousePressEvent 函数并调用 ignore 函数,你可以防止父级窗口移动,同时保持子 widget 的鼠标事件处理能力。 ​

    11410

    Qt实战:云曦日历篇

    自治区、直辖市人民政府、国务院各部委各直属机构积极响应,认真贯彻执行,普惠金融发展已经进入了高潮阶段,各大互联网公司和高校紧跟时代潮流,推出了各种创新性产品和软件,该软件作为一款以培养兴趣,提高学生软件项目的编程项目能力为目的...天气查询: 如图2,点击查询按钮,可输入所要查询的城市,点击获取天气按钮,即可显示所要查询的城市的天气情况 图片 3....天气刷新: 该功能主要用于刷新主界面由于网络问题,而无法及时显示天气的情况,如图3,点击刷新,即可解决该问题。 图片 4....bmp);}Calendar_Main::~Calendar_Main() { delete ui; }void Calendar_Main::initTopWidget() //切换月份的实现...另,如果大家有时间的话,也可以个人主页的专栏部分,查看我的Qt界面优化专栏与Qt功能优化专栏哦,里面分别存放有Qt相关的实战软件和相对实用的附属功能,大家感兴趣可以看看(๑>؂<๑) 另附Qt界面优化

    1.3K30

    使用PyQt5实现图片查看器的示例代码

    一、前言 在学习 PyQt5 的过程我会不断地做一些小的 Demo,用于让自己能够更好地理解和学习,这次要做的就是一个图片查看器,主要功能包括打开图片、拖动图片、放大和缩小图片。...图片成功显示出来之后,需要能够去拖动图片,以便于查看图片的每个角落,主要得实现三个方法:mouseMoveEvent、mousePressEvent 和 mouseReleaseEvent,分别对应移动鼠标...self.point = self.point + self.end_pos self.start_pos = e.pos() self.repaint() def mousePressEvent...getOpenFileName()方法有两个返回值,第一个返回值是所选择的文件的路径,第二个返回值是文件类型,得到文件路径就能创建一个 QPixmap 对象,再使用前面显示图片的方法进行显示,具体代码如下... QPainter ,可以根据 QPainter 的坐标系进行各种变换,例如平移(translate)和变化(scale),这里就可以通过使用 scale() 方法实现放大和缩小图片。

    1.7K10

    图像标注版本1-基本标注框

    目前本人已经实现了四个版本: 第一个版本,最基本的图像标注,可以将标注框显示图片上,这个版本在网上能见到的代码是最多的,也是最没什么难度的,参考了那么多代码,还是要感谢一下之前贡献的兄弟们。...第二个版本,最常见到的图像标注,多个标注框显示图片上 第三个版本,实现了标注Label的选择,并且将结果保存下来 第四个版本,实现了基于当前位置双击,被标注框的高亮显示和删除 第五个版本,对标注框结果进行各种类型的保存...一、自定义一个QLabel QLabel定义初始化、鼠标点击、鼠标移动、鼠标释放和图像绘制事件。...self) painter.setPen(QPen(Qt.red, 2, Qt.SolidLine)) painter.drawRect(rect) 二、实例化标注框,一个主界面显示标注框...() 三、一个main函数,显示主窗口,其他功能暂时不需要 if __name__ == '__main__': app = QApplication(sys.argv) labelwin

    23720
    领券