【问题标题】:Deploying Qt5.5 Qml App to Windows XP shows me a blank window?将 Qt5.5 Qml 应用程序部署到 Windows XP 显示一个空白窗口?
【发布时间】:2015-10-30 12:16:40
【问题描述】:

我使用 VS2013 构建了一个静态 x86 Qt5.5 库:

configure -static -prefix D:\Qt\qt-5.5.0-x86-static -opensource -release -static-runtime -nomake examples -no-compile-examples -static-runtime -nomake tools -no-iconv -qt-zlib -skip qtwebkit -confirm-license -qmake -opengl 桌面 -no-angle -nomake 测试 -target xp

之后,我使用这个静态库构建了我的 Qml 应用程序的静态链接 exe。它可以在我安装了Qt5.5的windows中随处运行。

然后我用VMware Workstation安装了一个纯Windows XP SP3,只安装了VC2008 runtime,没有安装VC2013 runtime。

首先,我将exe复制到这个XP中。它可以运行,但没有任何显示。我需要在 taskmgr 中杀死它。

其次,我将D:\Qt\qt-5.5.0-x86-static\qml中的所有文件夹复制到我的exe的根目录,它可以运行。但它只显示了一个带有正确窗口标题的空白窗口。

我想我已经听取了Deploying Qt 5 App on Windows 中的所有建议。但是为什么qml部分不能编译成静态库呢?如何让我的应用不显示空白?

附:即使我使用windeployqt 来部署应用程序的共享链接库版本。它还向我显示了空白窗口。但它可以在 Windows 7 上运行。

qtdiag 在我的虚拟 XP 上的输出:

Qt 5.5.0(i386-little_endian-ilp32 静态发布版本;由 MSVC 2013 提供) 在“windo ws”操作系统上:Windows XP [winnt 版本 5.1.2600]

架构:i386;特点:SSE2 SSE3 SSSE3 SSE4.1 SSE4.2

库信息:前缀路径:D:\Qt\qt-5.5.0-x86-static
文档路径:D:\Qt\qt-5.5.0-x86-static\doc HeadersPath: D:\Qt\qt-5.5.0-x86-static\include 库路径: D:\Qt\qt-5.5.0-x86-static\lib 库可执行文件路径: D:\Qt\qt-5.5.0-x86-static\bin BinariesPath: D:\Qt\qt-5.5.0-x86-static\bin 插件路径: D:\Qt\qt-5.5.0-x86-static\plugins ImportsPath: D:\Qt\qt-5.5.0-x86-static\imports Qml2ImportsPath: D:\Qt\qt-5.5.0-x86-static\qml ArchDataPath: D:\Qt\qt-5.5.0-x86-static 数据路径:D:\Qt\qt-5.5.0-x86-static
翻译路径:D:\Qt\qt-5.5.0-x86-static\translations
示例路径:D:\Qt\qt-5.5.0-x86-static\examples 测试路径: D:\Qt\qt-5.5.0-x86-static\tests SettingsPath:

标准路径 [... 表示可写条目]:DesktopLocation: “桌面” *C:\Documents and Settings\Administrator\

最终结论: 问题是我的虚拟 Windows XP 中的图形驱动程序。它可以在其他真实PC上运行。

但是 QML 的静态构建存在一个可悲的问题。 我发现了这个: https://forum.qt.io/topic/22035/qml-apps-not-runnable-using-static-build-up-to-qt-5-0-1-release/24 我需要复制此类文件夹QtQtQuick.2QtQuick 的原因是那些库无法编译加载。即使我将它们添加到 .pro 文件中。从 Qt 5.0 到 Qt 5.5。官方方面似乎不喜欢人们通过静态链接使用 QML。因此,静态构建 QML 应用程序是浪费时间。

【问题讨论】:

  • 在 stdout/stderr 或调试通道上是否有任何有用的输出?
  • @FrankOsterfeld 在下面的答案中查看 cmets,这就是使用 2>&1 的所有输出。
  • @FrankOsterfeld 哦,我误会你了。我将 exe 放入纯 XP 中,看看它可以在没有安装 Qt 运行时的情况下运行。所以我无法调试它。在我的开发环境中,一切正常。

标签: qt deployment static qml qt5.5


【解决方案1】:

Qt Quick 应用程序需要 3d 加速才能工作。这基于 OpenGL、DirectX via Angle 或商业版 Qt 附带的某种软件渲染器。由于您在配置中专门排除了角度,因此您需要一个合适的 OpenGL 驱动程序。确保 OpenGL 在您的机器上工作。您会找到相应的工具。

我不认为这与缺少 C++ 标准库(VC2013 运行时)有关,因为在这种情况下,您的应用程序会在启动期间崩溃并且无法运行。然而,Qt Quick 图形问题通常会导致正在运行的黑色应用程序正在向控制台写入警告。

可以使用 Qt 自带的 qtdiag.exe 命令行工具进行进一步调试(它带有在线安装程序。我不知道从源代码构建时它在哪里)。它会检查您使用的是哪个图形驱动程序,并且通常会显示错误消息。

【讨论】:

  • 我找到了qtdiag.exe,如何查看?
  • 打开命令提示符,cd到目录,运行qtdiag.exe查看输出。
  • 我在真实 Windows 7 和虚拟 Windows XP 中都运行。 windows 7有很多输出,而XP只是输出一点东西,没有任何关于图形驱动程序的东西。我想我需要一个阅读 Windows XP。
  • 请将您的XP机器的输出添加到问题中以供其他人检查。
  • “标准路径”块中间的切口完全没有意义。我认为这是一个控制台问题。请尝试将输出写入文件:qtdiag.exe >> qtdiagoutput.txt 2>&1
猜你喜欢
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2019-02-07
相关资源
最近更新 更多