如何为 QtQuick 应用程序选择 OpenGL 上下文

How to choose the OpenGL context for QtQuick applications

我正在写一个QtQuick应用程序,主要是QML,但我有一些部分更直接地使用OpenGL(一个OpenSceneGraph场景)。由于某些原因,我想使用 >= 3.3 的 OpenGL 版本,但 Qt 只选择了 3.0 的实现。我的代码是:

main.cpp:

#include <QApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    // Create the app.
    QApplication app(argc, argv);

    // Start the UI.
    QQmlApplicationEngine engine;
    engine.load(QUrl("main.qml"));

    return app.exec();
}

main.qml:

import QtQuick 2.7
import QtQuick.Controls 2.2

ApplicationWindow {
  id: root
  width: 800
  height: 600
  title: "App"

  visible: true

  Label {
    text: "OpenGL: " + OpenGLInfo.majorVersion + ' ' + OpenGLInfo.minorVersion + OpenGLInfo.profile
  }
}

一种方法是在 app.exec().

之前 设置默认 QSurfaceFormat
#include <QSurfaceFormat>

...

QSurfaceFormat surfaceFormat;
surfaceFormat.setMajorVersion(3);
surfaceFormat.setMinorVersion(3);
surfaceFormat.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(surfaceFormat);