C++ 如何在视网膜显示器上使用QPainter、QOpenGLPaintDevice和QOpenGLWidget平滑绘制?
当我尝试使用C++ 如何在视网膜显示器上使用QPainter、QOpenGLPaintDevice和QOpenGLWidget平滑绘制?,c++,qt,opengl,qpainter,C++,Qt,Opengl,Qpainter,当我尝试使用QWidget和QPainter绘图时,绘图非常滞后。我决定使用qopenglpaindevice和QOpenGLWidget来加速绘图。但与在常规小部件上绘制相比,形状的圆角非常粗糙 QWidget: QOpenGLWidget: 下面是我如何设置QOPENLPAINT设备的代码 QOpenGLPaintDevice* device = nullptr; void QOpenGLWorkspaceWidget::resizeGL(int w, int h) { ini
QWidget
和QPainter
绘图时,绘图非常滞后。我决定使用qopenglpaindevice
和QOpenGLWidget
来加速绘图。但与在常规小部件上绘制相比,形状的圆角非常粗糙
QWidget:
QOpenGLWidget:
下面是我如何设置QOPENLPAINT设备的代码
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();
}
我在这里找到了答案
openGlWidget.setSamples(8)
和painter.setRenderHint(QPainter::抗锯齿)
完成了任务