• 5191阅读
  • 2回复

[提问]求改进楼内算法(希望大家帮忙改进算法(关于图形项随场景变化自动改变大小和位置) [复制链接]

上一主题 下一主题
离线电动游星
 

只看楼主 倒序阅读 楼主  发表于: 2015-03-16
             我把这部分放在了view的resizeEvent里实现
  
void myview::resizeEvent(QResizeEvent *event){
QGraphicsView::resizeEvent(event);
QPixmap pix(":./image/0.jpg");
scene1->setSceneRect(0,0,this->width(),this->height());
scene1->setBackgroundBrush(pix.scaled(this->width(),this->height()));
==========================================
我让scene和view一样大,这部分是调整背景图片大小,其中scene1是view的成员变量,保存指向scene的指针。实测背景图片的大小调整已经没有问题,每次都和scene矩形保持一致。问题在于下面的图形项(item)的调整上(按钮和哪个黑色半透明方框是图形项)
==========================================
算出变换比例:
qreal xrate=scene1->width()/scene1->oldwidth;
qreal yrate=scene1->height()/scene1->oldheight;
其中oldwidth和oldheight是scene的成员变量,用来保存scene大小变化前的宽/高度
调整坐标系统
QTransform transform;
transform.scale(xrate,yrate);
对所有图形项(QGraphicsItem)实施坐标变换:
QList<QGraphicsItem*> list;
list=scene1->items();
foreach (QGraphicsItem* item,list)
{
item->setPos(item->pos().x()*xrate,item->pos().y()*yrate);
item->setTransform(transform);
}
最后保存scene大小:
scene1->oldwidth=scene1->width();
scene1->oldheight=scene1->height();
}
========================================================
我的算法就是这样,出现的问题在如下说明:
只要拉伸,就会出现这种错位情况(背景没有问题):

有时压缩时也会出现这种现象:

============================
我的观点是:按理说不应该出现这种现象啊。因为图形项(item)用的是自己的坐标系统,这样按比例缩放坐标系统后item的大小应该不成问题吧?而图形项的位置(Pos)用的是场景的坐标系统,这样按比例变化后位置应该不成问题啊(实际上不管我是否注释掉setPos相关代码都有问题)?
============================
我想要达到的效果是:整个窗口缩放时就好像我们在PS里缩放一张图片一样,图片的每一部分的位置和大小都保持原来比例。我没发现我这个算法哪里出错了,导致完不成这个效果,所以请教各位
离线clearsky

只看该作者 1楼 发表于: 2015-03-16
图片链接有问题。看不到图。
渴望  晴朗的天空
离线电动游星

只看该作者 2楼 发表于: 2015-03-16
回 clearsky 的帖子
clearsky:图片链接有问题。看不到图。 (2015-03-16 21:08) 

我在百度qt吧发的同样帖子去看一下吧,那里图片没问题
http://tieba.baidu.com/p/3639673759
看完再QTCN回复也行,两边都可以回复
快速回复
限100 字节
 
上一个 下一个