QGraphicsView绘图中的鼠标hover效果

鼠标经过GraphicsItem矩形边框变换形状效果不能用hoverEnterEvent, 只能用hoverMoveEvent,注意设置QGraphicsItem的子类的下述属性才能检测到Hover事件。

setAcceptHoverEvents
void graphicsrectitem::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
{
 
        if ((event->pos().y()<m_oldRect.y()+10)&&(event->pos().y()>m_oldRect.y()-20))
            setCursor(Qt::SizeVerCursor);
        else if ((event->pos().x()<m_oldRect.x()+10)&&(event->pos().x()>m_oldRect.x()-20))
            setCursor(Qt::SizeHorCursor);
        else if ( (event->pos().y()>m_oldRect.bottom()-10)&&(event->pos().y()<m_oldRect.bottom()+20) )
            setCursor(Qt::SizeVerCursor);
        else if ( (event->pos().x()>m_oldRect.right()-10)&&(event->pos().x()<m_oldRect.right()+20) )
            setCursor(Qt::SizeHorCursor);
        else
        {
            setCursor(Qt::PointingHandCursor);
        }
 
}
(true);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在QtQGraphicsView是用来显示和处理大型场景的视图类。要实现鼠标绘图,可以通过以下步骤进行: 1. 创建QGraphicsView实例和一个场景(QGraphicsScene)对象,并将场景设置给视图。 2. 创建一个继承自QGraphicsItem的自定义图形项类,用于表示绘图的形状。 3. 在自定义图形项类,重写mousePressEvent和mouseMoveEvent两个事件处理函数,用于捕捉鼠标按下和移动的事件。 4. 在mousePressEvent,记录鼠标按下的位置,并创建一个新的图形项对象。 5. 在mouseMoveEvent,根据鼠标移动的位置,更新图形项对象的形状。 6. 将新创建的图形项对象添加到场景,并使用QGraphicsScene::addItem()函数进行添加。 7. 最后,将场景设置给QGraphicsView,并调用QGraphicsView::show()函数显示视图。 以下是一个简单示例代码: ```cpp #include <QtWidgets> class CustomGraphicsItem : public QGraphicsItem { public: CustomGraphicsItem() : QGraphicsItem() { setFlag(ItemIsMovable); setAcceptHoverEvents(true); } QRectF boundingRect() const override { return QRectF(0, 0, 100, 100); } void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override { painter->drawEllipse(boundingRect()); } void mousePressEvent(QGraphicsSceneMouseEvent* event) override { if (event->button() == Qt::LeftButton) { QPointF position = event->pos(); qDebug() << "Mouse press at:" << position; } } void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override { setPos(event->pos()); } }; int main(int argc, char* argv[]) { QApplication app(argc, argv); QGraphicsScene scene; QGraphicsView view(&scene); CustomGraphicsItem* item = new CustomGraphicsItem(); scene.addItem(item); view.show(); return app.exec(); } ``` 这是一个简单的绘图程序,可以在视图点击鼠标左键,然后拖动鼠标绘制一个圆形图形项。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值