Qgraphicsitem转换会影响场景中的所有项目

时间:2012-10-30 16:22:25

标签: c++ qt graphics embedded

我有这个嵌入式Qt应用程序,它使用QGraphics框架来显示Web视图。 Web视图的尺寸为1280 * 720像素,QGraphicsView设置为在这些坐标(0,0,1280x720)处渲染场景。

我正在尝试在右上角添加一个加载指示器(位于1100,50),这是一个简单的PNG图像,我不时地使用QTimeLine旋转。

代码看起来像这样(我在互联网上找到了转换技巧):

// loading_indic initialization:
QGraphicsPixmapItem *loading_indic = 
             new QGraphicsPixmapItem( QPixmap("./resources/loading_64.png") );
loading_indic->setPos(QPoint(1100.0,50.0));

QTimeLine timeline = new QTimeLine(1000);
timeline->setFrameRange(0,steps);
connect(timeline, SIGNAL(valueChanged(qreal)), this, SLOT(updateStep(qreal)));
timeline->start();

// called at each step of a QTimeLine:
void updateStep(qreal step) {
    QTransform transformation = QTransform()
                // place coordinate system to the center of the image
                .translate(  width/2.0,  height/2.0) 
                // rotate the image in this new coordinate system
                .rotate(new_angle) 
                // replace the coordinate system to the original
                .translate( -width/2.0, -height/2.0);

    loading_indic->setTransform(transformation);
}

现在,我的问题是,在执行此操作时,WebView也会被翻译,导致所有内容都显示在屏幕中央。

结果如下所示:

problem

webview应该填满屏幕,加载指示符应该在右上角......

我的场景只包含两个项目:

Scene
  |
  \____ QGraphicsWebView
  \____ QGraphicsPixmapItem // loading indicator

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

解决了我的问题.. 我不知道为什么,但看起来将这个PNG项目添加到场景中却搞砸了场景的矩形。

这样做:

_scene.addItem(loading_indic);
loading_indic->setPos(1100.0, 50.0);
_scene.setSceneRect(0.0,0.0,1280.0,720.0); // resets the scene's rectangle ?!
loading_indic->startAnimation();

解决了这个问题。现在我的物品正确放在屏幕上。

如果有人对此有解释,我很乐意接受他的回答。