在 Retina 显示器中带有 QOpenGLWIdget 的 Qt MainWindow 显示错误的大小

man*_*tta 4 c++ opengl macos qt

我有一个带有MainWindow.

QOpenGLWidget在其中嵌入了一个。一切正常,直到我开始使用 Apple Retina 显示器并在高 DPI 模式下运行我的应用程序:我QOpenGLWidget的尺寸只有它应该具有的尺寸的 1/4(即,它只填充了它所在区域的左下角部分)应该填)。这个小部件显示原始 OpenGL 数据(实际上是一个 OpenSceneGraph 上下文)

我能做些什么来解决这个问题?

man*_*tta 5

发现对于 OpenGL 相关的小部件和事件,目前最好的选择是使用QPaintDevice::devicePixelRatio()( http://doc.qt.io/qt-5/qpaintdevice.html#devicePixelRatio )

这意味着乘以使用像素坐标的所有内容,即鼠标事件、调整大小事件等。例子:

void MyGLWidget::resizeGL(int width, int height) {
  width *= Application::desktop()->devicePixelRatio(); 
  height *= Application::desktop()->devicePixelRatio(); 

  ...
  // Continue with previous code

}
Run Code Online (Sandbox Code Playgroud)

在 Retina/HighDPI 显示器中以低分辨率模式运行时,或在常规显示器中运行时,该比率为 1,因此这对我来说似乎是便携的。