1、检测显卡驱动是否存在,不存在的情况,再去使用Qt::AA_UseSoftwareOpenGL选项
bool _isNotInstalledVideoDriver() {
QProcess *wmic = new QProcess();
wmic->setProcessChannelMode(QProcess::MergedChannels);
QObject::connect(wmic, &QProcess::readyReadStandardOutput, [wmic]() {
QTextStream stream(wmic->readAllStandardOutput());
QString s;
while (stream.readLineInto(&s)) {
QString line = s.trimmed();
if (line.isEmpty())
continue;
if (line.startsWith("InfFilename", Qt::CaseSensitive)) {
infName = line.split("=")[1];
} else if (line.startsWith("Name", Qt::CaseSensitive)) {
drvName = line.split("=")[1];
}
}
});
wmic->start("wmic path win32_videoController get InfFilename,name /format:list");
wmic->waitForFinished();
return infName.startsWith("display.inf");
}
2、检测opengl版本
QOpenGLContext ctx;
ctx.create();
QSurfaceFormat format = ctx.format();
auto major = format.majorVersion();
auto minor = format.minorVersion();
if (major < 2) {
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES, false);
QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL, true);
}
3、QWebengine显示黑屏的解决
qputenv("QMLSCENE_DEVICE", "softwarecontext");
注意:这些Attribute,要在QGuiApplication 构造之前设置才会生效!!!