如何在视网膜显示屏上使用QPainter,QOpenGLPaintDevice和QOpenGLWidget平滑绘制?

时间:2018-08-24 22:51:57

标签: c++ qt opengl qpainter

当我尝试使用QWidgetQPainter进行绘制时,该图形非常缓慢。我决定通过使用QOpenGLPaintDeviceQOpenGLWidget来加快绘图速度。但是与常规小工具上的绘图相比,形状的圆角非常粗鲁。

QWidget:

enter image description here

QOpenGLWidget:

enter image description here

这是我设置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 个答案:

答案 0 :(得分:0)

我在这里找到了答案

What steps are necessary to enable antialiasing when using a QPainter on a QGLWidget?

openGlWidget.setSamples(8)painter.setRenderHint(QPainter::Antialiasing) 完成了工作。