【问题标题】:Deploying Qt Qml App to Windows shows me a blank window将 Qt Qml App 部署到 Windows 显示一个空白窗口
【发布时间】:2014-02-19 01:57:32
【问题描述】:

在尝试将 Qt/Qml 应用程序部署到 Windows 8 时遇到很多问题,正如我在这个问题中所述:Deploying Qt Qml app to Windows 8 shows me a blank window

我可以复制 Qt5Widgets.dll 让它工作......但它只能在我自己的开发机器上工作(在那里安装它,但仍然是我自己的机器)。 然后我尝试将它安装在另一台机器上(运行 Windows 7 的 VM).. 起初我收到缺少平台插件的错误...好的,我将 qwindows.dll 复制到 appDir/platforms,它似乎解决了这个问题. 但后来我得到了另一个丢失的 dlls 错误(与 VS2010 相关的错误),然后我安装了 Visual Studio 2010 可再发行包......好的,现在应用程序启动了,但是有一个空白窗口:( qml 文件和所有内容都在资源文件中,因此它应该在二进制文件中。 而且我不知道从那里去哪里才能找到这个问题。

知道我能做什么吗?奇怪的是它在我自己的开发机器上安装得很好。 我的结论是在 OS X 中部署 Qt 要容易得多。

【问题讨论】:

    标签: c++ windows visual-studio qt


    【解决方案1】:

    我已经通过以下步骤解决了问题:

    • 检查您的 qml 文件路径。例如默认生成的代码如下:

      QtQuick2ApplicationViewer viewer;
      viewer.setMainQmlFile(QStringLiteral("qml/test/main.qml"));
      

      所以qmls应该在“qml/test”文件夹中

    • 检查丢失的 dll:

      1. 从 Windows Sysinternals 套件 (http://technet.microsoft.com/en-us/sysinternals/dd535533) 下载 VmMap 工具
      2. 在 qt creator 中编译并运行您的应用程序,使其正常工作
      3. 运行 VmMap 并打开正在运行的应用进程。
      4. 按“详细信息”对下部窗口进行排序 - 这样您将看到所有已加载的 DLL 按路径排序。
      5. 复制缺失的 dll。它现在应该可以工作了!

    【讨论】:

    • 我尝试了你所说的一切,但结果仍然相同:我在两台机器(W8 开发一台和 W7 VM 一台)上都安装了 VmMap,然后我通过 Qt Creator 运行我的应用程序,构建和运行,得到了很多新的 dll,比如 qtquick2plugin.dll、dialogplugin.dll 等。然后我在我的开发机器上安装了我的应用程序,发现应用程序实际上是从 Qt 安装中获取这些 dll,我想很好,我只需要复制他们在安装。这样做但在 VM 安装中的结果相同,并且 VmMap 没有显示 VM 中任何丢失的 dll。我仍然得到一个空白窗口,我该怎么办?
    • 我尝试根据我在 VmMap 中看到的内容来组织目录,例如 //QtQuick.2/ 中的 qtquick2plugin.dll,//plugins/imageformats 中的 qtiff.dll,尝试了 //imageformats/ 等中的图像格式,等等,等等……似乎没有任何效果 :( 为什么在 Windows 中部署 Qml 这么难 :(
    • 差不多了...我遵循了这种“艰难的方式”部署:qt-project.org/wiki/Deploy_an_Application_on_Windows 它在 W8 上运行良好(隐藏了 Qt 安装),但在 W7 上崩溃并在 QtQuick 中出现错误:异常代码: c0000005 会不会是一个错误的 VC redist 包造成的?此错误在开发或 W8 中永远不会发生。
    • 机器之间的另一个区别:W8 是开发版本,64 位并安装了 VC 2010。 W7 是一个 32 位的 VM,仅包含 vc 2010 可再发行包。
    • 那么你解决了吗?安装的可再发行软件包应与构建时使用的 Qt 二进制文件匹配。还有一个 qt.conf 文件 (qt-project.org/doc/qt-5.0/qtdoc/qt-conf.html) 指向“plugins”文件夹的位置。
    【解决方案2】:

    在部署带有空白窗口的 Qml 应用程序时,我也遇到了很多麻烦。

    总的来说,这个网站提供了有用的提示: https://qt-project.org/doc/qt-5.1/qtdoc/deployment-windows.html

    在我的情况下,空白窗口问题是由两个不同的原因引起的:

    1. qml 文件的相对路径不正确。我通过将 qml 文件存储在资源文件中然后从那里调用它们来解决这个问题。

    2. 如果应用程序位于网络驱动器上,这似乎是个问题。除了将应用程序复制到本地文件夹之外,我还没有找到解决方案。

    总的来说,我认为部署是一个很大的痛苦:-/

    【讨论】:

    • 感谢您的回答 :) 真的,在 Windows 上部署它非常痛苦 :( 1 - 我认为这不是问题,因为我使用的是资源文件,所以它不应该是个问题,对吧? 2 - 不在网络驱动器中 :( 唯一我认为可能是问题是一开始我没有使用资源文件,然后我移到资源文件......也许我错过了在这个过渡中发生了什么?我的 .pro 文件:pastebin.com/njqRrJxg 我的资源文件:pastebin.com/ntFVY8YY
    • 你的主要功能是什么样的?
    • 我看不出有什么问题。也许您再做一个测试:只需将 Qt\bin 文件夹的全部内容复制到您的应用程序中,以确保您没有忘记任何必需的库或其他东西......
    • 谢谢,我会尝试并告诉你。
    猜你喜欢
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    相关资源
    最近更新 更多