Qt - Помогите мне понять, как работает QFlipWidget
Мне нужен способ перевернуть изображение, чтобы показать другое изображение на его спине - например, перевернуть игральную карту - для приложения Qt, которое я пишу.
Я нашел пример кода под именем QFlipWidget (источник доступен по этой ссылке), который обеспечивает именно тот эффект, который я хочу.
Однако мне не нужны или не нужны все несколько слоев вложенных виджетов, макетов и тому подобного, поэтому я решил изменить код, сократив его до того, что мне нужно - полностью удалив макеты, QGraphicsProxyWidgets, класс RoundedRect и т. Д. Так как я ищу только пару изображений (из файлов jpg или чего-либо еще), я решил, что мне не нужно ничего больше, чем пара QGraphicsPixmapItems, чтобы вставить QGraphicsScene, и он должен работать так же.
После внесения этих изменений мои изображения были расположены рядом друг с другом, а ось вращения была линией пересечения между двумя изображениями, а не "сложены" друг над другом, как они отображаются в QFlipWidget. Нет проблем, подумал я, поэтому я установил смещение изображений, чтобы они занимали одно и то же пространство, но теперь у меня проблема в том, что лицевое изображение всегда остается сверху - после переворачивания я просто вижу реверс изображения на лицевой стороне. Во время анимации я вижу часть заднего изображения, так что я знаю, что она есть, но не отображается поверх переднего изображения.
Я предполагаю, что какая-то часть старого кода заставила флаг видимости становиться ложным вокруг середины анимации, но я не могу понять, где это находится в коде (или в унаследованных классах) или если это даже правильный механизм.
Итак, у меня есть два вопроса:
В оригинальном QFlipWidget, как обрабатывается видимость элемента, который не отображается в данный момент? То есть, что заставляет заднее изображение вращаться во второй половине преобразования вращения, а не просто переворачивать переднее изображение?
Как я могу добиться этого эффекта без какого-либо механизма, который я удалил в процессе удаления посторонних веществ?
Насколько я могу видеть, это единственная существенная / релевантная часть измененного кода (это из конструктора класса FlipWidget):
//--Front Widget
QString frontPath = "/path/to/image1.jpg";
m_frontPixmap = new QPixmap(frontPath);
m_frontItem = new QGraphicsPixmapItem(QPixmap(frontPath));
//Create the scene and add the items
m_scene = new QGraphicsScene(-300,0,600,600, this);
this->setScene(m_scene);
m_scene->addItem(m_frontItem);
//--BackWidget
QString backPath = "/path/to/image2.jpg";
m_backPixmap = new QPixmap(backPath);
m_backItem = new QGraphicsPixmapItem(QPixmap(backPath));
m_backItem->setTransform(QTransform().rotate(180, Qt::YAxis));
m_backItem->setParentItem(m_frontItem);
m_backItem->setOffset(-300,0);
//--Widget size
this->setMaximumWidth(598);