无法 运行 OSX 使用 macdeployqt 创建的应用程序。使用 Fusion 样式时缺少 Cocoa 插件

Can't run OSX app created with macdeployqt. Missing Cocoa plugin when using Fusion style

使用 Qt 5.5.0 C++,我制作了一个非常简单的基于小部件的应用程序示例——只是一个没有按钮的表单,使用默认值。如果我编译它并通过 macdeployqt 运行 它,然后 运行 从 dmg 文件中提取应用程序,它 运行 就好了。但是,如果我编辑 main.cpp 并将此行添加到...

QApplication::setStyle(QStyleFactory::create("Fusion"));

...在 QApplication a(argc, argv); 行之前...

...这当然需要我的 mainwindow.h 有一个 #include <QtWidgets> 行,然后通过 macdeployqt 运行 它,我得到以下错误。 (实际上,我遇到了崩溃,但是当我打开 example.app 文件并找到示例下的二进制文件时。app/Contents/MacOS/example 和 运行 那个,我得到了一个终端 window告诉我以下消息。)

This application failed to start because it could not find or load the Qt platform plugin "cocoa".

Reinstalling the application may fix this problem.

Abort trap: 6

因此,找不到 cocoa 插件。但是,我在这个路径中有 cocoa 插件:

例子.app/Contents/PlugIns/platforms/libqcocoa.dylib

我想我需要使用 otoolinstall_name_tool 命令来修复 macdeployqt 损坏的东西,但不知道该技术是什么。

有些博客可能会提到在 QApplication a(argc, argv); 行之前添加以下样式行:

QApplication::setStyle(QStyleFactory::create("Fusion"));

如果你这样做,Qt 5.5 会抛出一个 Cocoa 错误,当你尝试通过 macdeployqt 部署它时应用程序会崩溃,但在 Qt Creator 中 运行 它不会崩溃.

修复很简单。博客是错误的——将样式行放在 QApplication a(argc, argv); 行之后,而不是之前。现在,当您通过 macdeployqt 部署时,Cocoa 崩溃问题就消失了。