4

QTWebKit の機能を使用する DLL を作成し、Java 側で JNA を介してアクセスします。私のマシン(明らかにQTがインストールされている)では、正常に動作します。qtがインストールされていない別のマシンに移動してテストすると、次のようになります。

プラットフォーム プラグイン「windows」の読み込みに失敗しました。利用可能なプラットフォームは次のとおりです。

私のGoogle fu asは、プラットフォームDLL、つまりqwindows.dllとも含める必要があるという事実を指摘しましたqminimal.dllDeploying an Application on Windowsの QT5 のドキュメントによると、実行可能ファイルをデプロイするときに、保存ディレクトリ内で実行可能ファイルとして呼び出されるフォルダーにあるように聞こえplatformsます。

ユーザー プラグインとは対照的に、Qt プラグインはプラグイン タイプに一致するサブディレクトリに配置する必要があります。Windows プラットフォーム プラグインを展開したいので、"platforms" サブディレクトリに配置する必要があります。

それが私のジレンマにつながります。実行可能ファイルではなく、dll があります。そのため、プラットフォーム フォルダーをどこに配置すればよいかわかりません。テストアプリケーションを実行しているのと同じディレクトリに配置しようとしましたが、うまくいきませんでした。

では、QT がプラットフォーム ディレクトリを見つけられるようにするには、プラットフォーム ディレクトリをどこに配置すればよいでしょうか。

編集: 私はあまりフィードバックを持っていないので、この質問を言葉/アプローチするためのより良い方法があるかもしれません.

プラットフォーム DLL の場所を QT に伝えるにはどうすればよいですか?

これを達成する方法が必要なようです。私のマシンで実行すると、C:\Qt2\Qt5.0.2\5.0.2\msvc2012_64\plugins\platforms. だから、そこにいるようですm

4

2 に答える 2

4

DLL またはライブラリ内でを作成する必要があるというシナリオに対して、2 つの可能な解決策を見つけましたQApplication(基本的に、exe を持つ通常の Qt アプリケーションの作成とは異なります)。

  1. 最も簡単な解決策は、システム環境変数QT_QPA_PLATFORMを、あると予想platformsされるフォルダーに設定することです。私は、このソリューションがエンド システムにインストールされている他のアプリケーションに干渉する可能性があることを恐れて、好きではありませんでした。

  2. 次の解決策は、通常の QT アプリケーションが使用するコマンド ライン パラメーターを利用することです。通常の Qt アプリケーションQApplicationでは、次のようなメインで作成されます。

    int main(int argc, char *argv[]) {
       QApplication app(argc, argv);
    
       //other code
    
       return app.exec();
    }
    

    とにかく、この時点で作成する必要があるので、それを有利に利用してargvください。argc

    char *argv[] = {"YourAppName","-platformpluginpath", "C:/your/path/to/dll/folder", NULL};
    int argc = sizeof(argv) / sizeof(char*) - 1;
    
    QApplication app(argc, argv);
    

注:今でもグーグルで-platformpluginpath情報を見つけることができませんでした。または、QT で使用できるその他のコマンド ライン パラメータに関する情報。解決策を探しながらQTソースコードを掘り下げて見つけました。したがって、誰かがたまたまその情報を含むリソースへのリンクを持っている場合は、コメントを残すと便利です。

于 2013-05-31T17:55:04.077 に答える
3

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx#standard_search_order_for_desktop_applications

プログラムを Qt で実行すると、環境変数が調整され、パスにいくつかの要素が追加されます。

実行時にdllが認識しているデフォルトの「パス」は、それをロードするexe、その作業ディレクトリ、アプリケーションディレクトリなどによって異なります.dllをロードしているプログラムをテストする場合、同じフォルダにありますdll として、おそらくqwindows.dll「./platforms/」に入れる必要があるだけです。

この関数もチェックインする必要があります。

http://qt-project.org/doc/qt-4.8/qcoreapplication.html#setLibraryPaths

http://qt-project.org/doc/qt-4.8/qcoreapplication.html#libraryPaths

それが役立つことを願っています。幸運を。

于 2013-05-30T20:39:11.093 に答える