提高QGraphicsItem移动效率的解决方案

来源:互联网 发布:xls文件解密软件 编辑:程序博客网 时间:2024/05/21 22:29

需求:

我在QGraphicsView上面new出了10000多个Item,需要对视图做整体的移动和缩放。

qt替我们实现了移动和缩放的功能,就是不好找。。

解决:

一、

对单个的Item移动需要鼠标移动事件,2步设置:

1、setFlags(ItemIsSelectable | ItemIsMovable);

2、void mouseMoveEvent(QMouseEvent* event)

      {

QGraphicsView::mouseMoveEvent(event);

      }

二、

对整体Item的移动

我原来的做法效率很慢,原来的思路是把所有的Item放进一个组内,对组实现上面的鼠标移动。

正确的做法是:

QGraphicsView::setDragMode(QGraphicsView::ScrollHandDrag);  //将鼠标变成小手,这样就能拖动了

QGraphicsView::setInteractive(false);//是否能够选中单独的Item

备注:在写demo的时候,如果只写几个Item,是看不出移动效果的,需要大量的item


int xx = 0;
for (int i = -11000; i < 11000; i += 110) {
++xx;
int yy = 0;
for (int j = -7000; j < 7000; j += 70) {
++yy;
qreal x = (i + 11000) / 22000.0;
qreal y = (j + 7000) / 14000.0;

QGraphicsLineItem *item = new QGraphicsLineItem(10, 10, 20, 20);
item->setPos(QPointF(i, j));
this->scene()->addItem(item);
}
}

 


        

原创粉丝点击