ChatGPT解决这个技术问题 Extra ChatGPT

Qt 5.1.1:应用程序无法启动,因为缺少平台插件“windows”

编辑:有些人开始将我的问题标记为重复。不要忘记当我问这个问题时存在许多类似的问题(参见下面的列表)。但是,这些答案都没有解决我的问题。经过长时间的搜索,我发现了一条被所有指向丢失库的用户忽略的评论。现在,几个月后,评论已更改为答案。但是,当我自己回答这个问题时,我打算通过直接提供解决方案来帮助其他人。这不应该被遗忘,到目前为止我的回答帮助了很多人。因此我的问题绝对不是重复的。顺便说一句:顶部提供的链接中接受的答案并不能解决问题!

是的,我使用了搜索:

Failed to load platform plugin "windows". Available platforms are : Error

Deploying Qt C++ Application from Visual Studio qwindows.dll error

failed to load platform plugin "windows" Available platforms are: windows, minimal

但是,就我而言,问题仍然存在。我将 Qt 5.1.1 与 Visual Studio 2012 一起使用,并使用 Qt Creator 2.8.1 在 Windows 7 上开发了我的应用程序。应用程序以“发布”模式编译,如果直接使用 Qt Creator 启动,则可以执行。

但是,从“发布”文件夹开始时,我收到以下消息:

此应用程序无法启动,因为它无法找到或加载 Qt 平台插件“windows”。可用的平台插件有:minimal、offscreen、windows。

文件夹结构如下所示:

release
+ gui.exe
+ icudt51.dll
+ icuin51.dll
+ icuuc51.dll
+ libGLESv2.dll
+ Qt5Core.dll
+ Qt5Gui.dll
+ Qt5Widgets.dll
+ platforms

Platforms 是直接从 Qt\Qt5.1.1\5.1.1\msvc2012\plugins\platforms 复制的文件夹,包括例如 qwindows.dll。如果我像其他一些用户那样将它重命名为“平台”也没关系。 Qt 仍然没有找到“平台插件窗口”,我的错误在哪里?

我有类似的问题。 Windows 8.1 Qt 5.3.1 MinGW 32,动态链接。通过将 DLL 从 Qt 的文件夹复制到 ../MyApp/platforms/qwindows.dll 来解决。注意:路径中没有“插件”目录
或类似的问题,请使用工具 Depends,它会向您显示 DLL 依赖关系以及由此产生的问题。您可以使用此工具对 exe 或 dll 文件进行静态分析,也可以使用它来显示具有动态加载的 DLL 的应用程序的启动情况。
使用windeployQt

C
Community

好的,正如此处发布的 https://stackoverflow.com/a/17271172/1458552,其他用户没有过多关注:

libEGL.dll 丢失了!尽管在尝试启动应用程序时未报告此问题(已报告所有其他 *.dll,例如 Qt5Gui.dll)。


libEGL.dll 位于何处?
就我而言: Qt\Qt5.1.1\5.1.1\msvc2012\bin (当然取决于您的 Visual Studio 版本)
你怎么知道丢失的 dll 是 libEGL ?
@ user1493046 我设法使用依赖及其分析模式(F7)重现了这个。应用程序启动并显示错误后,libEGL.dll 出现在依赖项列表中。
添加 libEGL.dll 无效。但是,设置以下环境变量对我有用: QT_QPA_PLATFORM_PLUGIN_PATH=%QTDIR%\plugins\platforms\
B
Brandon

我在我的 exe 位置旁边创建了一个平台目录并将 qwindows.dll 放入其中,但我仍然收到“无法加载平台插件“windows”。可用平台是:windows”错误。

我从 C:\Qt\Qt5.1.1\Tools\QtCreator\bin\plugins\platforms 复制了 qwindows.dll,这不是正确的位置。我查看了在 Qt Creator 中运行的调试日志,发现我的应用在调试器中运行时正在 C:\Qt\Qt5.1.1\5.1.1\mingw48_32\plugins\platforms 中查找。

当我从 C:\Qt\Qt5.1.1\5.1.1\mingw48_32\plugins\platforms 复制时,一切正常。


设置以下环境变量对我有用: QT_QPA_PLATFORM_PLUGIN_PATH=%QTDIR%\plugins\platforms\
设置 QT_QPA_PLATFORM_PLUGIN_PATH 对我有用。谢谢@arsalank2
L
Lukasz Czerwinski

该版本可能缺少库/插件,或者库位于错误的目录和/或来自错误的目录。

Qt 预期答案:使用 windeployqt。解释见最后一段

手动回复:

在 application.exe 文件所在的目录中创建一个名为“platforms”的文件夹。将 qwindows.dll(位于您用于发布应用程序的编译器的 /bin 中)复制并粘贴到“平台”文件夹中。就像魔术一样有效。如果 .dll 不存在,请检查 plugins/platforms/ (其中 plugins/ 与 bin/ 位于同一目录中)<-- PfunnyGuy 的评论。

似乎一个常见的问题是 .dll 是从错误的编译器 bin 中获取的。请务必从与用于发布您的应用程序的编译器相同的编译器复制您的 qwindows.dll。

Qt 带有平台控制台应用程序,这些应用程序会将所有依赖项(包括 qwindows.dll 和 libEGL.dll 之类的依赖项)添加到已部署的可执行文件的文件夹中。这是部署应用程序的预期方式,因此您不会错过任何库(这是所有这些答案的主要问题)。 Windows 应用程序称为 windeployqt。每个操作系统可能都有一个部署控制台应用程序。


这就是我需要的:注意,qwindows.dll 不在 Qt 平台安装的 bin/ 中,而是在 plugins/platforms/ 中,plugins/ 与 bin/ 在同一目录中
谢谢!综上所述,文件分别为:主目录下的Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll和YourApp.exe,子目录下的platforms\qwindows.dll和platforms\libEGL.dll。
windeployqt 是正确的答案。我使用了它,它复制了 .exe 旁边所需的所有内容。它消除了知道哪些 dll 需要哪些不需要的猜测
windeployqt使用方法:打开cmd或powershell,运行windeployqt.exe .\target.exe
C
Community

QT_QPA_PLATFORM_PLUGIN_PATH 环境变量设置为 %QTDIR%\plugins\platforms\ worked for me

还提到了 herehere


虽然这个答案可能会让它在您当前的机器上运行,但它并不能帮助那些试图将他们的程序部署到其他机器并且需要具体确定哪些库丢失/需要的人。
在 2017 年,这对我有用。我不会部署任何应用程序!使用 Qt 创建者只需 Open\New file or project...\ Qt Widgets Application ,然后 Run 并崩溃并显示相同的消息。设置这个变量对我有帮助。
只需将插件文件夹复制到您的即兴“发行版”旁边的某个位置并将环境变量指向它 - 应该可以工作(无需使用“QTDIR”):)
J
Joel

我遇到了这个问题,但我找不到任何答案可以为我解决这个问题。

我的同事在他的机器上安装了 Qt (5.6.0):C:\Qt\Qt5.6.0\5.6\msvc2015\plugins
我在同一台机器上安装了 Qt (5.6.2)地点。

我从这篇文章中了解到:http://www.tripleboot.org/?p=536,Qt5Core.dll 在首次安装 Qt 时具有写入插件的位置。由于我同事和我的 Qt 目录相同,但安装了不同版本的 Qt,因此需要不同的 qwindows.dll 文件。当我运行他部署的 exe 时,它将使用我的 C:\Qt\Qt5.6.0\5.6\msvc2015\plugins\platforms\qwindows.dll 文件,而不是位于 .\platforms 子文件夹中可执行文件旁边的文件。

为了解决这个问题,我在应用程序中添加了以下代码行,这似乎迫使它在查看 Qt5Core.dll 中的路径之前在 exe 旁边查找“平台”子文件夹。

QCoreApplication::addLibraryPath(".");

我在 QApplication 调用之前将上面的行添加到 main 方法中,如下所示:

int main( int argc, char *argv[] )
{
    QCoreApplication::addLibraryPath(".");
    QApplication app( argc, argv );
    ...
    return app.exec();
}

这对我有用...但请注意,如果您碰巧遇到与同事共享调试版本的情况,您可能需要在“平台”目录中使用 qwindowsd.dll...
这对我有用,因为提到 qwindowsd.dll,我知道我的应用程序是在调试模式下编译的,我确实安装了 Qtxxxd.dll 库,但在平台文件夹中使用 qwindows.dll。
根据 QT 文档,The directory of the application executable (NOT the working directory) is always added followed by .... 似乎表明 addLibraryPath() 总是以当前 exe 目录作为参数调用。因此,只需将 qwindows.dll 放在 exe 旁边的平台文件夹中即可解决问题。
K
KunMing Xie

创建目录 platforms 并将 qwindows.dll 复制到其中,platformsapp.exe 在同一个目录中

cd app_dir mkdir platforms xcopy qwindows.dll platforms\qwindows.dll

文件夹结构 + app.exe + platforms\qwindows.dll


问题中提到“平台是直接从Qt\Qt5.1.1\5.1.1\msvc2012\plugins\platforms复制的文件夹,包括例如qwindows.dll。”
@parasietje 应用正在目录 platforms 中寻找 qwindows.dll。我发布这个是因为我已经修复了它。你在投票前做测试吗?
您的回答没有回答原始问题。您的回答表明原始海报已经尝试过。
P
Peter Quiring

我找到了另一个解决方案。在 app 文件夹中创建 qt.conf,如下所示:

[Paths]
Prefix = .

然后将插件文件夹复制到应用程序文件夹中,它对我有用。


好的,我在 minGW、CMake、Qt 5.12 环境中,无法应用 windeploy-tool。平台文件夹在那里,但没有工作。用 Qt-lib 中的一个替换它也没有帮助。通过使用您的技巧(复制文件夹后)修复。谢谢!
L
Loebsen Van de Graaff

我在使用 QT 5.6、Anaconda 4.3.23、python 3.5.2 和 pyinstaller 3.3 时遇到了这个问题。我创建了一个带有使用 QTcreator 开发的界面的 python 程序,但必须将其部署到其他计算机,因此我需要使用 pyinstaller 制作一个可执行文件。

如果我设置以下环境变量,我发现问题在我的计算机上得到了解决:

QT_QPA_PLATFORM_PLUGIN_PATH: %QTDIR%\plugins\platforms\ QTDIR: C:\Miniconda3\pkgs\qt-5.6.2-vc14_3\Library

但是这个解决方案只适用于我在这些文件夹中安装了 conda 和 qt 的电脑。

为了解决这个问题并使可执行文件在任何计算机上运行,我必须编辑“.spec”(首先由 pyinstaller 生成的文件)以包含以下行:

datas=[('C:\Miniconda3\pkgs\qt-5.6.2-vc14_3\Library\plugins\platforms*.dll', 'platforms'),]

该解决方案基于 Jim G. 和 CrippledTable 的答案


J
Jann Poppinga

对我来说,解决方案是更正 PATH 变量。它有 Anaconda3\Library\bin 作为第一条路径之一。该目录包含一些 Qt 库,但不是全部。显然,这是一个问题。将 C:\Programs\Qt\5.12.3\msvc2017_64\bin 移到 PATH 的前面为我解决了这个问题。


Y
Yahya Tawil

对于来自 QT 5.14.0 版的任何人,我花了 2 天时间才找到这个错误声明:

windeployqt 不适用于 MinGW QTBUG-80763 将在 5.14.1 中修复

https://wiki.qt.io/Qt_5.14.0_Known_Issues

所以要注意。将 windeployqt 与 MinGW 一起使用将给出此处所述的相同错误。


J
Jacob Robbins

这些答案中的大多数都包含好的(正确的)信息,但就我而言,仍然缺少一些东西。

我的应用程序构建为库 (dll) 并由非 Qt 应用程序调用。我用windeployqt.exe在安装目录下设置了Qt dll、平台、插件等,但还是找不到平台。经过一些实验,我意识到应用程序的工作目录设置为不同的文件夹。因此,我使用 GetModuleHandleExA 抓取了 dll“存在”的目录,并在运行时使用将该目录添加到 Qt 库路径中

QCoreApplication::addLibraryPath(<result of GetModuleHandleExA>);

这对我有用。


E
EJoshuaS - Stand with Ukraine

我有同样的问题,并通过应用几件事来解决它。首先,如果它是您使用 Qt 编写的程序。

在“C:\ Qt \ Qt5.10.0 \ 5.10.0 \ msvc2017_64 \ plugins”的文件夹(在我的情况下)中,您可以找到其他文件夹,其中之一是“平台”。该“平台”文件夹将被复制到您的 .exe 可执行文件旁边。现在,如果您收到错误 0xc000007d 是您没有复制原来的版本,因为它可以是 32 位或 64 位。

如果您继续出现错误,则说明您缺少更多库。使用“Dependency Walker”程序,您可以检测到一些丢失的文件夹。它肯定会向您表明您需要一个 NVIDIA .dll,并告诉您位置。

另一种方法是从可执行文件旁边的“C:\Windows\System32”文件夹中复制所有 .dll,而不是使用“Dependency Walker”。执行您的 .exe,如果一切正常,因此您不需要或使用不需要或使用的 dll 库中没有空间占用,请使用带有所有选项的 .exe 程序,并且在不关闭 .exe 的情况下删除所有 .exe 文件。您刚刚复制的.exe旁边的dll,因此如果您的程序正在使用这些.dll,系统不会让您擦除,只会删除那些不必要的。

我希望这个解决方案能为您服务。

请记住,如果您的操作系统是 64 位,库将在 System32 文件夹中,如果您的操作系统是 32 位,它们也将在 System32 文件夹中。发生这种情况是为了不存在与 64 位计算机中的 32 位程序的兼容性问题。 SysWOW64 文件夹包含 32 位文件作为备份。


它有效,但更像是一个临时解决方案。是否可以做一些事情,以便您不需要复制平台文件夹?
M
Michal Turlik

对于 MinGW 平台,如果您是通过手工编写的 CMakeLists.txt 临时编写的 Debug 目标,您还需要将 qwindows.dll 添加到平台目录中。 windeployqt 可执行文件运行良好,但似乎出于某种奇怪的原因,CMake 构建也需要发布变体。总之,最好在您的平台目录中同时拥有 qwindows.dll 和 qwindowsd.dll。在 QtCreator 中导入 CMake 项目然后运行构建过程时,我没有注意到同样奇怪的结果。在命令行上编译 CMake 项目似乎会触发 qwindows.dll 依赖关系,或者如果为 Debug 目标设置了正确的依赖项(qwindowsd.dll)


J
Jakub Krzesłowski

使用这个批处理文件:RunWithQt.bat

@echo off
set QTDIR=C:\Qt\Qt5.1.1\5.1.1\msvc2012\bin
set QT_QPA_PLATFORM_PLUGIN_PATH=%QTDIR%\plugins\platforms\
start %1

要使用它,请将您的 gui.exe 文件拖放到资源管理器中的 RunWithQt.bat 上,

或从命令行调用 RunWithQt gui.exe


S
Soberbia coding

如果你安装了 Anaconda,我建议你卸载它并尝试从源代码安装 python 包,我以这种方式解决了这个问题


M
MyGeertRo

应用程序 qtbase/bin/windeployqt.exe 会自动部署您的应用程序。如果您在正确设置环境变量的情况下启动提示,它将部署到当前目录。您会找到一个脚本示例:

@echo off
set QTDIR=E:\QT\5110\vc2017

set INCLUDE=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\include;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\include;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\ucrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\shared;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\winrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\cppwinrt

set LIB=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\ucrt\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\um\x86;

set LIBPATH=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.17134.0;C:\ProgramFiles (x86)\Windows Kits\10\References\10.0.17134.0;C:\Windows\Microsoft.NET\Framework\v4.0.30319;

Path=%QTDIR%\qtbase\bin;%PATH%
set VCIDEInstallDir=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\
set VCINSTALLDIR=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\
set VCToolsInstallDir=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\
set VisualStudioVersion=15.0
set VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
set VS110COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\
set VS120COMNTOOLS=S:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\
set VS150COMNTOOLS=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\
set VS80COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\
set VS90COMNTOOLS=c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\
set VSINSTALLDIR=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\
set VSSDK110Install=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VSSDK\
set VSSDK150INSTALL=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VSSDK
set WindowsLibPath=C:\Program Files (x86)\Windows Kits\10\UnionMetadata;C:\Program Files (x86)\Windows Kits\10\References
set WindowsSdkBinPath=C:\Program Files (x86)\Windows Kits\10\bin\
set WindowsSdkDir=C:\Program Files (x86)\Windows Kits\10\
set WindowsSDKLibVersion=10.0.14393.0\
set WindowsSdkVerBinPath=C:\Program Files (x86)\Windows Kits\10\bin\10.0.14393.0\
set WindowsSDKVersion=10.0.14393.0\
set WindowsSDK_ExecutablePath_x64=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\
set WindowsSDK_ExecutablePath_x86=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\

mkdir C:\VCProjects\Application\Build\VS2017_QT5_11_32-Release\setup
cd C:\VCProjects\Application\Build\VS2017_QT5_11_32-Release\setup
copy /Y ..\Release\application.exe .
windeployqt application.exe
pause

T
Thomas Sturm

比方说,您想要一些 CGAL-Demos 可移植的。因此,您将有一个文件夹“CGAL”,其中有一个名为“lib”的子文件夹:CGAL 文件夹中任何程序的所有(通用)support-dll 都放在此处。在我们的示例中,这将是 Dll-Download:只需解压缩到“lib”目录即可。在 demos-page 上向下滚动得越远,内容就越令人印象深刻。就我而言,polyhedron-demo 似乎是正确的。如果这在我 10 岁以上的笔记本上运行,我印象深刻。所以我在“CGAL”目录中创建了一个文件夹“demo”,旁边是“lib”。现在在该文件夹中创建一个 .cmd 文件。我将我的命名为“Polyhedron.cmd”。所以我们有一个这样的目录结构:

 CGAL - the bag for all the goodies
  lib - all libraries for all CGAL-packages
 demo - all the demos I'm interested in
[...] - certainly some other collections, several apps per folder...
Polyhedron.cmd - and a little script for every Qt-exe to make it truly portable.

在这个小例子中,“Polyhedron.cmd”包含以下文本:

@echo off
set "me=%~dp0"
set PATH=%me%lib
set "QT_PLUGIN_PATH=%me%lib\plugins"
start /b "CGAL Polyhedron Demo" "%me%demo\polyhedron\polyhedron_3.exe"

显然,除了最后一行之外,所有脚本都可以相同。唯一需要注意的是:只要您使用实际程序,“DOS 窗口”就会一直打开。关闭 shell 窗口,你也可以杀死 *.exe。无论您将“CGAL”文件夹复制到何处,因为奇怪的“%~dp0”-wriggle 代表我们开始的 *.cmd 文件的完整路径,尾随“\”。所以“%me%lib”始终是实际库的完整路径(在我的例子中是“CGAL\lib”)。接下来的 2 行告诉 Qt 它的“运行时”文件在哪里。这至少是用于 Windows-Qt 程序的文件“qwindows.dll”加上任意数量的 *.dll。如果我没记错的话,Dll 库(至少在我下载它时)有一个小“错误”,因为它包含“平台”目录,其中包含 qwindows.dll。所以当你打开lib目录时,你需要在“platforms”旁边创建一个文件夹“plugins”,然后移动到“plugins”中。如果一个 Qt 应用程序,任何 Qt 应用程序,没有找到“qwindows.dll”,它就找不到“windows”。并且它期望它在“plugins”目录中名为“platforms”的目录中,它必须被操作系统告知它正在运行......并且如果“QT_PLUGIN_PATH”不完全指向你的所有帮助程序-dll需要,一些 Qt 程序仍然可以毫无问题地运行。还有一些人抱怨缺少你从未听说过的 *.dll ......


J
Jesse T-P

我遇到了同样的错误,并用与其他帖子中提到的方法不同的方法解决了它。希望这将有助于未来的读者。

建造:

Windows 10(64 位)Minicoda(使用 python 3.9.4)(pkgs 来自 conda-forge 频道)pyqt 5.12.3

我的场景:

我正在为一些嵌入式工作构建一个 GUI 应用程序。我有两台用于开发的机器(相同的操作系统和架构),一台的互联网连接为零。打包我的环境并在离线机器上安装后,我遇到了你得到的错误。

解决方案:

在您的 conda 环境中找到 qt.conf 文件。对我来说:C:\Users\"name"\miniconda3\envs\"env_name"\qt.conf

确保路径正确。我需要更新“名称”,因为这是旧机器遗留下来的。

希望这可以帮助某人。


S
Saman

我在 Windows 10(VS2019)中运行 QT5 应用程序时遇到了同样的问题。我的错误是

..\Debug\Qt5Cored.dll 模块:5.14.1 文件:kernel\qguiapplication.cpp 行:1249

此应用程序无法启动,因为无法初始化 Qt 平台插件。重新安装应用程序可能会解决此问题。

解决方案

由于我使用的是 QT msvc2017,因此我将插件文件夹从“C:\Qt\Qt5.14.1\5.14.1\msvc2017\plugins”位置复制到二进制位置

有效。

然后检查 Visual Studio 输出窗口并识别从插件文件夹加载的 dll 并删除不需要的 dll


A
Andrei

QT_PLUGIN_PATH 环境变量设置为 <...>/plugins 目录也对我有用。


S
Star

Pycharm 尝试运行 Matplot 时出现错误。对我有用的解决方案是将 Anaconda3\Library\plugins 目录(例如:c:\Program files\Anaconda3\Library\plugins)设置为环境变量“QT_PLUGIN_PATH”。要进行设置,您应该转到控制面板/系统/高级系统设置/环境变量。


a
arsdever

主要讲Windows平台

尝试使用 vcpkg 安装的 Qt 库调试应用程序构建时遇到同样的问题,而我的应用程序使用 cmake 构建。在找到解决方案之前遇到了几个小时的麻烦。最简单的方法是执行以下操作:

在您的构建文件夹中,找到最终可执行文件所在的文件夹。

在该文件夹中,您会找到一些 Qt 库,例如 Qt6Core.dll。

注意库文件名中是否有d后缀,即Qt6Cored.dll而不是Qt6Core.dll

在 vcpkg 文件夹中,您有 2 个选项 ./installed/x64-windows/Qt6/plugins/platforms ./installed/x64-windows/debug/Qt6/plugins/platforms

./installed/x64-windows/Qt6/plugins/platforms

./installed/x64-windows/debug/Qt6/plugins/platforms

如果存在 d 后缀,请将 ../debug/.. 文件夹(否则为另一个)的内容复制到您的可执行文件和 Qt 库所在的同一文件夹中的平台文件夹中(如果没有这样的文件夹,自行创建)。

你可以以某种方式自动化这个过程。把这个任务留给你。如果我自己这样做,将更新答案。

编辑

如果您使用的是 CMakeLists,您可能想尝试一下。将以下内容添加到您应用的 CMakeLists.txt

# assuming your target's name is app

if(WIN32)
    add_custom_command(
        TARGET app POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_directory
            ${Qt6_DIR}/../../$<$<CONFIG:Debug>:debug/>Qt6/plugins/platforms/
            $<TARGET_FILE_DIR:app>/platforms/
    )
endif()