最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

QGraphicsItem的缩放

来源:动视网 责编:小采 时间:2020-11-27 20:12:49
文档

QGraphicsItem的缩放

QGraphicsItem的缩放:QGraphicsItem的缩放QgarphicsItem是Qt视图体系中的项。QGraphicsItem本身是不支持鼠标拖动来缩放的,本文介绍如何通过更改鼠标事件来修改项的大小。(本文所用Qt版本为Qt4.8)下文代码实现的功能为:按住shift,再用鼠标拖动,可以改变Box的大小。定
推荐度:
导读QGraphicsItem的缩放:QGraphicsItem的缩放QgarphicsItem是Qt视图体系中的项。QGraphicsItem本身是不支持鼠标拖动来缩放的,本文介绍如何通过更改鼠标事件来修改项的大小。(本文所用Qt版本为Qt4.8)下文代码实现的功能为:按住shift,再用鼠标拖动,可以改变Box的大小。定


QGraphicsItem的缩放

QgarphicsItem是Qt视图体系中的项。QGraphicsItem本身是不支持鼠标拖动来缩放的,本文介绍如何通过更改鼠标事件来修改项的大小。(本文所用Qt版本为Qt4.8)

下文代码实现的功能为:按住shift,再用鼠标拖动,可以改变Box的大小。

定义类Box

class Box:public QGraphicsItem
{
 Q_DECLARE_TR_FUNCTIONS(Box)public: 
 Box();
 ...protected: 
 void mousePressEvent(QGraphicsSceneMouseEvent *event); 
 void mouseMoveEvent(QGraphicsSceneMouseEvent *event); 
 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
};
Box::Box()
{
 setFlags(QGraphicsItem::ItemIsSelectable|
 QGraphicsItem::ItemIsMovable|
 QGraphicsItem::ItemSendsGeometryChanges|
 QGraphicsItem::ItemIsFocusable); //接受键盘事件
 mBoundingRect = QRectF(0,0,100,100);
 mBoundingRect.translate(-mBoundingRect.center());
}

上面两段代码为Box类的定义及构造函数的实现,最重要的是三个鼠标函数的重载,及在setFlag中使Box可以接受键盘事件。

重载mousePressEvent

void Box::mousePressEvent(QGraphicsSceneMouseEvent *event)
{ if(event->modifiers()&Qt::ShiftModifier)
 {
 resizing = true; //resizing变量在鼠标点击时变为true //在放开时变为false
 setCursor(Qt::SizeAllCursor);//鼠标样式变为十字
 } else
 QGraphicsItem::mousePressEvent(event);
}

重载mouseMoveEvent

void Box::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{ if(resizing)
 {
 QRectF rect(mBoundingRect); 
 if(event->pos().x()<rect.x())
 rect.setBottomLeft(event->pos()); else
 rect.setBottomRight(event->pos());
 mBoundingRect=rect;
 mBoundingRect.translate(-mBoundingRect.center());
 scene()->update();
 } else
 QGraphicsItem::mouseMoveEvent(event);
}

在这里,简单的更新Box的左下角和右上角来匹配鼠标位置。更好的做法是分别处理x和y坐标。

重载mouseReleaseEvent

void Box::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{ if(resizing)
 {
 resizing = false;
 setCursor(Qt::ArrowCursor);
 } else
 QGraphicsItem::mouseReleaseEvent(event);
}

用户在改变大小的过程中放开鼠标,就将resizing改为true,以及将鼠标样式变回箭头。

文档

QGraphicsItem的缩放

QGraphicsItem的缩放:QGraphicsItem的缩放QgarphicsItem是Qt视图体系中的项。QGraphicsItem本身是不支持鼠标拖动来缩放的,本文介绍如何通过更改鼠标事件来修改项的大小。(本文所用Qt版本为Qt4.8)下文代码实现的功能为:按住shift,再用鼠标拖动,可以改变Box的大小。定
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top