如何在视网膜显示器上使用 QPainter、QOpenGLPaintDevice 和 QOpenGLWidget 平滑绘制? [复制]
Posted
技术标签:
【中文标题】如何在视网膜显示器上使用 QPainter、QOpenGLPaintDevice 和 QOpenGLWidget 平滑绘制? [复制]【英文标题】:How to draw smoothly using QPainter, QOpenGLPaintDevice and QOpenGLWidget on retina display? [duplicate] 【发布时间】:2018-08-24 22:51:57 【问题描述】:当我尝试使用QWidget
和QPainter
绘图时,绘图非常滞后。我决定使用QOpenGLPaintDevice
和QOpenGLWidget
来加速绘图。但是形状的圆角与在常规小部件上绘制相比非常粗鲁。
QWidget:
QOpenGLWidget:
这是我如何设置 QOpenGLPaintDevice 的代码。
QOpenGLPaintDevice* device = nullptr;
void QOpenGLWorkspaceWidget::resizeGL(int w, int h)
initDeviceIfNeed();
handleResize(this, w, h);
int ratio = devicePixelRatio();
device->setSize(QSize(w * ratio, h * ratio));
device->setDevicePixelRatio(ratio);
void QOpenGLWorkspaceWidget::initDeviceIfNeed()
if (!device)
device = new QOpenGLPaintDevice();
drawer->setPaintDevice(device);
void QOpenGLWorkspaceWidget::paintGL()
initDeviceIfNeed();
glDisable(GL_DEPTH_TEST);
glClearColor(1, 1, 1, 1);
workspaceDrawer->draw();
【问题讨论】:
【参考方案1】:我在这里找到了答案
What steps are necessary to enable antialiasing when using a QPainter on a QGLWidget?
openGlWidget.setSamples(8)
和 painter.setRenderHint(QPainter::Antialiasing)
完成了这项工作。
【讨论】:
以上是关于如何在视网膜显示器上使用 QPainter、QOpenGLPaintDevice 和 QOpenGLWidget 平滑绘制? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在不损失视网膜显示质量的情况下将 UIView 捕获到 UIImage