对单个的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);
}
}
需求:我在QGraphicsView上面new出了10000多个Item,需要对视图做整体的移动和缩放。qt替我们实现了移动和缩放的功能,就是不好找。。解决:一、对单个的Item移动需要鼠标移动事件,2步设置:1、setFlags(ItemIsSelectable | ItemIsMovable);2、void mouseMoveEvent(QMouseEvent* e
Qt在绘制point的时候,一般都直接调用addPoint()函数,但是在point数量达到一定程度的时候,会发生很严重的卡顿现象,比如,绘制10w个point,绘制100w个point(point的无序的)
以10w个point为测试,
QTime time;
time.start();
for(int i=0;i&lt;100000;i++){
image = new QImage();
QString path=QFileDialog::getOpenFileName(this,"open","../","Image files (*.bmp *.jpg *.pbm *.pgm *.png *.ppm *.xbm *.xpm)");
if(!path.isEmpty