QGraphicsItem使用注意点

我在用qt编写缩放图片的功能的时候(见https://blog.csdn.net/weixin_43935474/article/details/89327314)我是在主界面上放置了一个QGraphicsView,然后里面放了QGraphicsScene,然后自己重写了QGraphicsItem类并放到QGraphicsScene中,从而显示图片并进行缩放操作。其中有2个问题困扰了好久,现在终于解决了:
一、如何在外部获取qgraphicview中qgraphicitem的消息?
具体操作:
1.重写QGraphicsItem类时,先继承Qobject,再继承qgraphicview,否则会报错,如下:(我重写的QGraphicsItem名为ImageWidget )

class ImageWidget :public QObject, public QGraphicsItem
{
    Q_OBJECT
    ······

2.添加signales

signals:
    void    showPos(QPointF pointf, QColor qColor,qreal qrScale);

3.在主界面添加信号响应函数并建立连接:

QObject::connect(m_Image,&ImageWidget::showPos,this,&MainW::showMousePos);//该行代码写在主界面类的构造函数中
void MainW::showMousePos(QPointF point, QColor qColor, qreal qrScale)
{
	//TODO:
}

二、QGraphicsItem类内部获取鼠标移动的消息
一开始用:

void ImageWidget::mouseMoveEvent(QGraphicsSceneMouseEvent *event)

后来发现在用户没有点击鼠标的情况下无法触发该函数。
然后改用:

void ImageWidget::hoverMoveEvent(QGraphicsSceneHoverEvent *event)

就可以了,并且要在主界面函数中添加如下代码:

m_Image->setAcceptHoverEvents(true);//m_Image是ImageWidget对象
m_graphicsScene->addItem(m_Image);//m_graphicsScene是QGraphicsScene对象
m_GraphicView->setScene(m_graphicsScene);//m_GraphicView是QGraphicsView对象
m_GraphicView->setMouseTracking(true);
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GreenHandBruce

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

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

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

打赏作者

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

抵扣说明:

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

余额充值