3

Qt ベースのアプリケーションを開発していますが、バンドルで macdeployqt を使用すると、Qt プラグインがバンドルにコピーされません。

ただし、もう一度実行すると、そうです。さらに、「アプリケーションが QtSvg モジュールを使用する場合、svg アイコン プラグインがデプロイされます。」私のアプリケーションは QtSvg を使用していますが、iconengines/* プラグインがコピーされていません。

-verbose=3 で実行してみましたが、最後の数行は次のとおりです。

Log: Created configuration file: "silverlock.app/Contents/Resources/qt.conf" 
Log: This file sets the plugin search path to "silverlock.app/Contents/PlugIns" 

最後のメッセージが言っていることから、実行を継続するつもりだったようですが、クラッシュしたかのようにそうではありませんでした。

なぜこうなった?macdeployqt は、以前は問題なく機能していました。

使用:

  • Qt 4.6
  • Qt クリエーター 2.0
  • ヒョウ 10.5.8
4

1 に答える 1

5

問題は、macdeployqt ソースの shared.cpp の 355 ~ 365 行にあります。

while (frameworks.isEmpty() == false) {
    const FrameworkInfo framework = frameworks.takeFirst();
    copiedFrameworks.append(framework.frameworkName);

    // Get the qt path from one of the Qt frameworks;
    if (deploymenInfo.qtPath.isNull() && framework.frameworkName.contains("Qt") 
        && framework.frameworkDirectory.contains("/lib"))
    {
            deploymenInfo.qtPath = framework.frameworkDirectory;
            deploymenInfo.qtPath.chop(5); // remove "/lib/"
    }

名前に「Qt」が含まれるバンドル内の最初のフレームワーク/dylib 名が、プラグイン パスの決定に使用されます。私のバンドルの最初のフレームワーク/dylib 名は "QtSolutions_QtSingleApplication-2.6" だったので... 画像を取得します。したがって、回避策は、dylib の名前を「qsa-2.6.dylib」などに変更することだと思います。

一言で言えば、フレームワークとライブラリの名前に「Qt」が含まれていないことを確認してください。そうしないと、macdeployqt で問題が発生します。

この回答が同じ問題を抱えている人に役立つことを願っています。

于 2010-08-10T23:17:56.547 に答える