如何在视网膜显示器上使用 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 【问题描述】:

当我尝试使用QWidgetQPainter 绘图时,绘图非常滞后。我决定使用QOpenGLPaintDeviceQOpenGLWidget 来加速绘图。但是形状的圆角与在常规小部件上绘制相比非常粗鲁。

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 平滑绘制? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使 UIButton 图像在视网膜显示器上显得清晰完美

如何在不损失视网膜显示质量的情况下将 UIView 捕获到 UIImage

iOS SDWebImage - 如何正确处理不同设备上的视网膜图像?

如何在Qgraphicsview上使用QPainter绘图

在xcode中使用像素而不是点?

为啥视网膜设备上的图标不显示?