Интересный вопрос. Вот то, что я только что проверил и, кажется, работает.
Добавьте QGraphicsView
с размерами размеров части изображения, которую вы хотите отобразить, например, 100x100. Создайте QGraphicsScene
и добавьте его в представление:
QGraphicsScene* pScene = new QGraphicsScene(this);
ui->graphicsView->setScene(pScene);
Теперь добавьте ваше изображение в сцену. В моем случае у меня есть изображение в моем файле ресурсов. Хитрость заключается в том, чтобы установить sceneRect
в положение, которое вы хотите отобразить. Я хотел отобразить часть изображения размером 100x100, начиная с 0,300:
pItem = pScene->addPixmap(QPixmap::fromImage(QImage(":/photos/image")));
pScene->setSceneRect(0,300,100,100);
Чтобы проверить плавное перемещение, я добавил кнопку, которая при нажатии вызывает слот, называемый перемещением. Этот слот просто обновляет 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
, чтобы «увидеть», что изображение движется плавно.