[/quote]Как я понял, Вы вращаете не квадрат а "рамку" в 3D пространстве (поворот вокруг осей X и Y). Тогда для изначального квадрата лежащего в плоскости XY "исчезновение" естественно (площадь проекции = 0, а wireframe никто не обещал). Для вращения в плоскости XY нужен только rotate(z_angle, Qt::ZAxis);
[/quote]
Я вращаю QPixmap. Далее код такой: painter.drawPixmap(0, 0, my_pixmap);
Да, это имитация поворота в 3D, хотя, конечно, при параллельной проекции фигня получается, но все-таки интересно.
Я описывал другой "баг". Я понимаю, что если повернуть плоскость на 90 градусов (oX || oY), то она "исчезнет", но фишка в том, что если его после значения 90, ее вращать обратно (анимация так работает), то на значении 89 он обратно не появляется. Круто, да?
Попробуйте подставить такие углы (именно в такой последовательности): 0, 10, .. 80, 90, 80, .. 10, 0. Несколько кадров после 90 - не отрисуются. Версия Qt 4.5.2. Одинаково проявляется на Windows (XP & Vista) и Linux (Ubuntu).
IMHO, QGraphicsItem "помнит какое-то время", что он был невидим (именно из-за значения угла!) и понижает приоритет update(), т.е. код virtual QGraphicsItem::paint() не выполняется сразу. Зато когда угол до нуля дойдет - выкинет сразу пачку апдейтов. Этакая оптимизация у них - надо бы их код посмотреть...
Как я уже говорил, пробовал всякие там processEvents(), таймеры, синки и вообще у меня программка простейшая. Я понимаю, была бы нагрузка в аппликации серьезная, но ведь нет!
Да ладно, уже понесло меня.
Короче проще не поворачивать в точное значение 90. Сделал 89.9 и все заработало идеально плавно и глаз разницы не замечает. И безо всяких ухищрений. Как оно и должно быть.