重写QGraphicView类实现在view控件上显示十字标线(解决QGraphicView重写qpaintevent无效的问题)

在这里插入图片描述
在我的代码里界面上放了一个qgraphicview,然后设置qgraphicview的场景QGraphicsScene,然后在QGraphicsScene里面放item(也就是上图显示的黑色线条)
我的需求是在view控件区域显示十字标辅助线
操作步骤如下:
1.重写一个类cusView继承自QGraphicsView
2.重写paintEvent函数,这个函数里写绘制十字线的代码。
3.重写mousemove函数,在里面调用this->scene()->update();目的是触发paintevent事件
具体重写的cusView类代码如下:
cusview.h头文件:

#ifndef CUSVIEW_H
#define CUSVIEW_H

#include <QObject>
#include <QGraphicsView>
#include <QMouseEvent>
class cusView:public QGraphicsView
{
    Q_OBJECT
public:
    cusView(QWidget *parent = nullptr);
    cusView(QGraphicsScene *scene, QWidget *parent = nullptr);
    ~cusView();
    void paintEvent(QPaintEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    QPoint mousePt;
};

#endif // CUSVIEW_H

cusview.cpp源文件:

#include "cusview.h"

cusView::cusView(QWidget *parent):mousePt(QPoint(-10,-10))
{
    this->setParent(parent);
    this->setMouseTracking(true);//为了让本控件实时响应鼠标移动事件,不加这一行的话,只有当鼠标点击的时候才会响应鼠标移动事件
}

cusView::cusView(QGraphicsScene *scene, QWidget *parent):mousePt(QPoint(-10,-10))
{
    this->setScene(scene);
    this->setParent(parent);
    this->setMouseTracking(true);//为了让本控件实时响应鼠标移动事件
}

cusView::~cusView()
{

}

void cusView::paintEvent(QPaintEvent *event)
{
    QPainter paint(this->viewport());//这行很重要,没有这行的话,绘制出来的东西都会被view里面的其他东西遮住
    QPen pen(Qt::blue,2);
    paint.setPen(pen);
    QPainterPath path;
    path.moveTo(mousePt.x(),0);
    path.lineTo(mousePt.x(),this->height());
    path.moveTo(0,mousePt.y());
    path.lineTo(this->width(),mousePt.y());
    paint.drawPath(path);
    QGraphicsView::paintEvent(event);
}

void cusView::mouseMoveEvent(QMouseEvent *event)
{
    mousePt = event->pos();
    this->scene()->update();
}

欢迎加WX:13382893223进行技术交流

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreenHandBruce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值