使用MSYS2 mingw64包编译时Qt Virtual Keyboard出现黑屏问题
问题解决方案
导致MSYS2 mingw工具链下Qt Virtual Keyboard显示黑屏的核心原因是MSYS2打包的qtvirtualkeyboard模块默认配置和Qt官方预编译版本存在差异,可按以下步骤依次排查解决:
首先确认已安装完整的虚拟键盘模块包,在MSYS2 mingw64终端执行命令:
pacman -S mingw-w64-x86_64-qtvirtualkeyboard确保模块版本和你使用的Qt 5.15.2完全匹配。
在main.cpp的
QGuiApplication实例初始化前,添加指定虚拟键盘样式的环境变量设置,代码修改后如下:#include <QGuiApplication> #include <QQmlApplicationEngine> int main(int argc, char *argv[]) { qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")); // 新增:指定虚拟键盘默认样式,90%以上的黑屏问题可通过此设置解决 qputenv("QT_VIRTUALKEYBOARD_STYLE", QByteArray("generic")); // 可选:如果依旧黑屏,添加此行强制使用软件渲染后端解决OpenGL兼容问题 // qputenv("QT_QUICK_BACKEND", QByteArray("software")); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif QGuiApplication app(argc, argv); QQmlApplicationEngine engine; // 可选:如果QML模块加载异常,添加此行替换为你本地MSYS2的mingw64/qml实际路径 // engine.addImportPath("C:/msys64/mingw64/qml"); const QUrl url(QStringLiteral("qrc:/main.qml")); QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection); engine.load(url); return app.exec(); }该问题的核心诱因是MSYS2打包qtvirtualkeyboard时未设置默认样式,导致虚拟键盘找不到样式资源无法渲染,才会出现黑屏现象。
如果以上方案都无效,可自行下载Qt 5.15.2版本的qtvirtualkeyboard源码,在当前MSYS2环境下编译安装,替换pacman安装的预编译包即可。
内容的提问来源于stack exchange,提问作者steinio
相关产品推荐
相关产品推荐

