Кросспост из
блога автора. Комментировать лучше
там, но можно и тут
Граждане разработчики,
Особенно использующие Qt, вы же тут читаете, я знаю.
Вот есть Qt 5.2 и Маки с ретиной. Надо, значит, чтобы было Щастье.
На самом деле, 99% Щастья есть сходу: если в Info.plist написан NSPrincipalClass, то все стандартные элементы (шрифты, к примеру) рендерятся в ретину и все работает.
Но.
У меня используется свой OpenGL-код, который зовется из QGraphicsScene::drawBackground().
Он, понятно, сходу рисует в четверти окошка в таком случае.
Эксперименты показали, что достаточно поменять одну строчку. Вместо:
glViewport(x,y,w,h);
написать
int dpr = painter->device()->devicePixelRatio();
glViewport(x*dpr,y*dpr,w*dpr,h*dpr);
И все начинает (вроде бы?) работать как надо. Зумится, ротейтится, сдвигается - все вроде как надо.
Так вот, вопрос: Что Я Делаю Не Так?. Не упускаю ли я что-то важное?
P.S. Рассматривание кода Qt-шных примеров не дало ответа. А именно: в части примеров делают именно так. И все работает. А вот в qtbase\examples\widgets\graphicsview\boxes - вообще нет никакого следа devicePixelRatio(), все каким-то чудом работает "само" (и ретина поддерживается нормально)