重写QGraphicView类实现在view控件上显示十字标线(解决QGraphicView重写qpaintevent无效的问题)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了重写QGraphicView类实现在view控件上显示十字标线(解决QGraphicView重写qpaintevent无效的问题),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1796字,纯文字阅读大概需要3分钟。
内容图文
![重写QGraphicView类实现在view控件上显示十字标线(解决QGraphicView重写qpaintevent无效的问题)](/upload/InfoBanner/zyjiaocheng/995/bec10724e1be4f95a76620769955845e.jpg)
在我的代码里界面上放了一个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进行技术交流
内容总结
以上是互联网集市为您收集整理的重写QGraphicView类实现在view控件上显示十字标线(解决QGraphicView重写qpaintevent无效的问题)全部内容,希望文章能够帮你解决重写QGraphicView类实现在view控件上显示十字标线(解决QGraphicView重写qpaintevent无效的问题)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。