void MapView::setUseOpenGL(bool useOpenGL) { #ifndef QT_NO_OPENGL if (useOpenGL) { if (!qobject_cast<QOpenGLWidget*>(viewport())) { QSurfaceFormat format = QSurfaceFormat::defaultFormat(); format.setDepthBufferSize(0); // No need for a depth buffer format.setSamples(4); // Enable anti-aliasing QOpenGLWidget *openGLWidget = new QOpenGLWidget(this); openGLWidget->setFormat(format); setViewport(openGLWidget); } } else { if (qobject_cast<QOpenGLWidget*>(viewport())) setViewport(nullptr); } QWidget *v = viewport(); if (mMode == StaticContents) v->setAttribute(Qt::WA_StaticContents); v->setMouseTracking(true); #else Q_UNUSED(useOpenGL) #endif }
Window::Window() { QVBoxLayout *mainLayout = new QVBoxLayout; view = new QGraphicsView(this); scene = new QGraphicsScene(view); view->setRenderHints(QPainter::Antialiasing); scene->setBackgroundBrush(Qt::blue); myGLWidget = new GLWidget(this); QOpenGLWidget *oglw = qobject_cast<QOpenGLWidget *>(myGLWidget); QSurfaceFormat format; format.setSamples(4); format.setDepthBufferSize(24); //format.setMajorVersion(3); //format.setMinorVersion(0); //format.setVersion(3,1); format.setProfile(QSurfaceFormat::CompatibilityProfile); oglw->setFormat(format); view->setViewport(myGLWidget); view->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); view->setScene(scene); mainLayout->addWidget(view); setLayout(mainLayout); setWindowTitle(tr("GraphicsView + OpenGL Test Unit")); }
MyGraphicsView(QWidget * parent = nullptr) : QGraphicsView{parent} { setViewport(m_gl); // sets m_gl's parent Q_ASSERT(m_gl->parent()); }