【问题标题】:HelloWorld Deployment with QtQuick 2.0 in Windows 7 and XP在 Windows 7 和 XP 中使用 QtQuick 2.0 部署 HelloWorld
【发布时间】:2013-02-23 12:52:50
【问题描述】:

我几周来一直在努力正确部署我的应用程序(这是一种爱好),我只是不知道还能尝试什么。

我通过选择 Applications -> Qt Quick 2 Application (Built-in Elements) 在 Qt Creator (2.6.1) 中启动了一个新项目。我调整了 QML,使背景为蓝色,文本为红色:

main.qml

import QtQuick 2.0

Rectangle {
    width: 360
    height: 360
    color: "blue" // Added!
    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
        color: "red" // Added!
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            Qt.quit();
        }
    }
}

我正在使用 Qt 5.0.1 和 x86 MSVC 2010 编译器。我构建了发布版本,它在 QtCreator 中运行良好。如果您需要更多编译器细节,我会发布它们。

为了部署,我在桌面上创建了一个名为HelloWorld/ 的新文件夹,并从H:\Qt\Qt5.0.1\5.0.1\msvc2010\bin\*H:\Qt\Qt5.0.1\5.0.1\msvc2010\plugins\* 和'H:\Qt\Qt5.0.1\5.0.1 复制了所有内容 \msvc2010\qml* 以及 Release HelloWorld.exe 可执行文件。

矫枉过正?是的。但我很绝望。

当我在 Windows 7 64 位中运行 HelloWorld/HelloWorld.exe 时,应用程序运行良好。但是,当我将此 HelloWorld/ 文件夹复制到运行 Windows XP 32 位的虚拟机中时,它会显示一个大小合适的窗口,但其中没有任何内容(白色,没有文本)。单击窗口中心时,窗口会正常关闭。

所以我在 Dependency Walker 中加载了可执行文件,但没有任何异常(当然缺少 IESHIMS.DLL 和 WER.DLL)。我运行了 Start Profile,得到了一系列红色错误:

GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsAlloc") 从地址 0x78ABBA3B 的“MSVCR100.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsGetValue") 从地址 0x78ABBA48 的“MSVCR100.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsSetValue") 从地址 0x78ABBA55 的“MSVCR100.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsFree") 从地址 0x78ABBA62 的“MSVCR100.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

LoadLibraryExW("C:\documents and settings\owner\desktop\helloworld\platforms\qminimald.pdb", 0x00000000, DONT_RESOLVE_DLL_REFERENCES) 返回 NULL。错误:%1 不是有效的 Win32 应用程序 (193)。

LoadLibraryExW("C:\documents and settings\owner\desktop\helloworld\platforms\qwindowsd.pdb", 0x00000000, DONT_RESOLVE_DLL_REFERENCES) 返回 NULL。错误:%1 不是有效的 Win32 应用程序 (193)。

GetProcAddress(0x7E410000 [USER32.DLL], "UpdateLayeredWindowIndirect") 从地址 0x013A8749 的“QWINDOWS.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C9C0000 [SHELL32.DLL], "SHCreateItemFromParsingName") 从地址 0x013A8997 处的“QWINDOWS.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C9C0000 [SHELL32.DLL], "SHGetStockIconInfo") 从地址 0x013A89C9 的“QWINDOWS.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetTickCount64") 从地址 0x670726A7 的“QT5CORE.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x755C0000 [MSCTFIME.IME], "ImeGetImeMenuItems") 从地址 0x76397354 的“IMM32.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

GetProcAddress(0x4FDD0000 [D3D9.DLL], "Direct3DCreate9Ex") 从地址 0x01487198 处的“LIBEGL.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

我也尝试运行调试版本,但我只有 64 位版本的 MSVC100 dll,所以我无法将它们复制到 XP 机器(我只能运行 32 位可再发行版本)。我不知道我可以使用哪些其他工具来尝试解决我的问题。

我知道我一定是在做一些愚蠢的事情,但我真的在互联网上找不到任何可以提供帮助的东西。花这么多时间开发一个 Qt 应用程序,然后在尝试部署它时陷入困境,真是令人沮丧。

我应该注意到,该程序在 Windows 7 32 位虚拟机中运行良好(在安装了 MSVC2012 可再发行组件之后)。

真的有兴趣运行的应用程序在 Windows XP 中运行起来非常奇怪。当我第一次运行它时,窗口大小正确,并显示了几个文本字符串。但是没有显示任何 Rectangle{} 元素。我让应用程序运行了几分钟,为自己煮了些咖啡,当我回到我的电脑时,窗口随着文本光标的节拍闪烁着随机的形状和文本!那是什么呀?!看起来一个基本的数学函数被搞砸了,所以界面的某些部分显示在不正确的尺寸和位置上。我什至看到鼠标光标一眨眼就出现了真实的界面(是的,随机形状会随着鼠标光标的节拍出现和消失)。

一时兴起,我尝试使用该应用程序(单击我知道存在文本框的位置)来填充其中一个列表,并且成功了!除图形外,该应用程序运行良好。我知道 Qt 5.0 重新设计了一些 OpenGL 处理,对吧?这可能是一个错误,还是我没有安装的库?

【问题讨论】:

    标签: visual-c++ deployment qml qt5 qtquick2


    【解决方案1】:

    我在使用 ANGLE 的 Qt 5.1 rc1 构建的 Windows XP 上部署 quick 2.0 应用程序时也遇到了同样的问题;这似乎是角度问题,在http://qt-project.org/wiki/Qt-5-on-Windows-ANGLE-and-OpenGL 上建议使用 OPENGL for XP,在 Windows XP 上使用 OPENGL 的 Qt 5.1 也适用于我

    【讨论】:

      【解决方案2】:
      1. 安装Microsoft Visual C++ 2010 Redistributable Package (x86) 在客户端计算机(Windows XP)上。
      2. 使用发布版本,而不是调试版本,您似乎使用的是 Debug 版本。
      3. 不要使用 OpenGL(大多数 XP 用户可能会注意到已更新 OpenGL 版本,否则您可能不得不强制他们升级它。)

      更新 使用适用于 Windows XP 的 OpenGL。用户必须安装或升级他们的 OpenGL 驱动程序。 Read this.

      【讨论】:

        【解决方案3】:

        尝试使用 MinGW 版本而不是 VC++ 版本。很可能有一层又一层的 .Net 东西阻​​止您在 XP 上运行。 XP 在 90% 的当前 .Net 东西存在之前就出现了,这就是为什么它无法工作,因为它没有安装。

        只是猜测,但值得一试。

        【讨论】:

        • 在我的原始帖子中查看我的再次编辑部分。我认为它可能与图形问题有关,而不是编译器问题。应用程序确实运行,只是没有正确显示图形。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        相关资源
        最近更新 更多