如何使用QT显示部分图像?

时间:2011-11-16 17:19:32

标签: c++ qt

所以,这是我的问题:我有这个非常大的图像,我想只展示它的一个特定部分。用户按下特定键后,我希望图像移动,显示其中的另一部分。从图像的一部分到另一部分的过渡必须是平滑的,动画的。

我尝试使用QLabel来显示图像,但它总是显示图像的中心,我真的不知道如何制作动画。你们会建议什么?

4 个答案:

答案 0 :(得分:4)

有趣的问题。这是我刚刚测试过并且似乎有用的东西。

添加QGraphicsView尺寸为您要显示的图像部分的尺寸,例如100x100。创建QGraphicsScene并将其添加到视图中:

QGraphicsScene* pScene = new QGraphicsScene(this);
ui->graphicsView->setScene(pScene);

现在将您的图像添加到场景中。在我的情况下,我的资源文件中有一个图像。诀窍是将sceneRect设置为您想要显示的位置。我想从0,300开始显示100x100的图像部分:

pItem = pScene->addPixmap(QPixmap::fromImage(QImage(":/photos/image")));
pScene->setSceneRect(0,300,100,100);

为了测试平稳移动,我添加了一个按钮,当点击它时会触发一个名为move的插槽。此广告位只会更新sceneRect。在我的简单示例中,我只是将图像向右移动100像素。在现实世界中,您还可以沿对角线或垂直方向移动它并检查图像限制。

void move()
{
    for (unsigned i=currentX; i<currentX + 100; i++)
    {
    ui->graphicsView->scene()->setSceneRect(i,300,100,100);
    qApp->processEvents();
    }
    currentX += 100;
}

注意currentX变量。它只不过是最后一个图像位置。此外,我们必须调用processEvents以“看到”图像平滑移动。

答案 1 :(得分:1)

您可以使用QPixmap :: copy(int x,int y,int width,int height)复制图像的某个区域并显示该区域。

答案 2 :(得分:0)

几个选项:

  1. 尝试使用Q3CanvasSprite(在Q3Canvas内)。它的设计更多的是将一个图像分成多个图像,而不是用于它们之间的动画。您可以尝试滥用它并声明(比方说)100帧(每个数字10个,这将用作动画步骤)或只使用move()方法。
  2. 尝试QGraphicsPixmapItem::setOffset()QGraphicsScene内)。这可能是过度的,因为QGraphicsScene是为大量图像制作的。)

答案 3 :(得分:0)

我不确定,但也许这可以通过QStateMachineQAbstractAnimation完成。