QT リリース プログラム QML プログラムが異常で動作しない Windeployqt QML の依存関係をエクスポートできない QML インターフェイスの画像を表示できない プログラムの公開プロセス vs+qt

最近、プログラムと依存ライブラリが qt と qml によって開発および実装される qt プログラムがリリースされる予定です。qt は、windeployqt コマンドを使用して qt の依存関係を自動的に収集できるため、次のプロセスは、付属の Windeployqt ツールを使用することです。 qt を使用して、qt 関連の依存関係と、発生した問題の解決策を収集します。学んだとしても無視してください。
qml への参照がない場合は無視してください。

最初のステップはコマンドラインを開始することです

cmd
を使用する最も速い方法は、ディレクトリのアドレス バーに cmd と入力してコマンドを実行することです。

注意すべき点は 2 つあります:
1. 以下のデモはすべてリリース版を使用しており、msvc+qt でコンパイルされたプログラムは依存関係を持っています。デバッグを使用している場合は、忘れずに qt ライブラリを収集してください。これは *d.dll (Qt5Cored.dll など、リリースには d なし) である必要があります。
2. vs+qt でコンパイルされた qt 依存関係は msvc** のディレクトリから取得され、mingW でコンパイルされた qt 依存関係は mingW のディレクトリから取得され、混合できないことにも注意する必要があります。

2 番目のステップは、vcvars64.bat を実行することです。

「D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars64.bat」

これを実行する目的は、vs の依存関係を収集することです。プログラムが qtcreator によって生成されている場合は、この手順を無視できます。vs+qt で生成されたプログラムの場合にのみ実行されます。
上記のファイル パスは、vs2017 をコンピューターにインストールしたパスです。自分の vs バージョンに応じて対応する調整を行う必要がありますが、実行されたファイル名は同じです。

3 番目のステップは、windeployqt コマンドを実行することです。

Windeployqt [プログラム名またはダイナミック ライブラリ]

以下に例を示します。

windeployqt chapter1-basics.exe

通常の状況では、コマンドはデバッグ バージョンかリリース バージョンかを自動的に判断でき、
パラメータも指定できます。

windeployqt chapter1-basics.exe --Debug
windeployqt chapter1-basics.exe --Release

QML に依存する必要がある場合は、コマンド パラメーターを指定する必要があります。

windeployqt chapter1-basics.exe --qmldir D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\qml

–qmldir [インストールしたqtのディレクトリ下のqml]
ここでは、qtをコンパイルするときに、mingWバージョンのqtなのかmsvcバージョンのqtなのかを区別することに注意する必要があります。

以下の図に示すように、コマンドが正常に実行され、qt 依存ライブラリと qml 関連の依存関係が収集できた場合は、qt 環境がインストールされていないマシンを直接検索して、正常に表示できるかどうかをテストできます。そして正常に実行されました。
以下の問題はコマンドの実行結果が異常で、qmlに携帯電話に関する依存関係がないため問題が発生するものです...

問題 1 Windeployqt が QML 関連の依存関係を収集できない

通常の状況では、コマンドを使用してすべての依存関係を収集します
Windeployqt Chapter1-basics.exe --qmldir D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\qml

通常の状況は、次の図に示されているとおりです。
ここに画像の説明を挿入
qml 関連の依存関係が見つからない これがケースです。
ここに画像の説明を挿入
つまり、コマンド ラインの実行結果が正常であれば、おめでとうございます。今日遭遇した問題は発生しません。それは問題である可能性があります。最初の問題も 2 番目の問題も存在しないため、qt 環境をインストールせずに直接実行できます
私の実行結果は、会社のコンピューターで 2 番目の異常な状況になりました。つまり、コマンド パラメーター –qmldir を指定するかどうかに関係なく、qml 関連の依存関係は存在しません。その場合は、次の方法を実装して解決しました。

1. Qt5QuickControls2.dll をコピーし、参照されている qt 環境とバージョンの問題に注意します。
2. Qt5QuickControls2.dll ライブラリで Windeployqt コマンドを実行します。

windeployqt --qmldir D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\qml Qt5QuickControls2.dll

説明すると、コマンドライン上の dll と exe の位置は重要ではなく、
このコマンドを実行すると、qml への依存関係がすべて追加されます。

参加後、プログラムが実行されてテストされると、2 番目の問題が発生します。

質問 2 実行中のプログラムの qml インターフェイスが異常に表示されます

正常とは次のようになります。
ここに画像の説明を挿入
異常とは次のようになります。
ここに画像の説明を挿入
つまり、プログラムは正常に起動できますが、qml 関連のものは正常に表示されません。その理由を知るためです。調査に長い時間を費やした結果、次のことがわかりました。
1. 完全な qt 環境をインストールし、bin ディレクトリを path 環境変数に追加した後、プログラムは正常に実行できます。
2. qt 環境をインストールしないと、windeployqt メソッドで qt 環境が正常に表示されない; 3. Windeploy メソッドで qt 環境を取得し
、qt 環境をインストールしても正常に表示できない;
4. qt 環境が正常に表示されないWindeploy メソッドで環境を取得してインストール qt 環境では、exe ディレクトリにある Qt5Core.dll を削除すると(このライブラリは Windeployqt で収集されるため)正常に表示されますが、表示できない原因は にあり
ますQt5Core.dll ライブラリがあるので、再度コピーしますが、それでも動作しません。

解決策:
[QT インストール ディレクトリ]\bin\qt.conf ファイルを Qt5Core.dll ディレクトリにコピーし、ファイルを次のように変更します。
Prefix=...
ここで... は上位レベルのディレクトリです。つまり、 Qt5Core.dll プラグイン ディレクトリと qml ディレクトリの場所。
たとえば、
Prefix=./pQ
に変更した場合、plugins ディレクトリと qml ディレクトリの内容を pQ ディレクトリに配置し、pQ​​ ディレクトリを Qt5Core.dll と同じディレクトリに配置する必要があります。

この時点でも表示がおかしい場合は、コマンド群が保存されている可能性があるため、[Qt インストールディレクトリ]\qml フォルダを使用し、
ここに画像の説明を挿入
インストールディレクトリ内のディレクトリをコピーして、下図の上記ディレクトリと置き換える必要があります。不完全 問題。

注:
Windeployqt を使用して収集された依存関係はすべて同じディレクトリ内にあります。次に、Qt で始まる上記のディレクトリをすべて qml ディレクトリに配置する必要があります。他のディレクトリは plugins ディレクトリにあるため、plugins ディレクトリを作成し、qml ディレクトリと plugins ディレクトリを pQ ディレクトリの下に配置します。
ここに画像の説明を挿入
これまでのところ、私の問題は解決されており、qt 環境がインストールされていないマシンでは、プログラムは正常に実行でき、qml の表示も正常です。
私の解決プロセスがあなたの問題を解決できること、あるいは新しい啓発をもたらすことを願っています。

おすすめ

転載: blog.csdn.net/myhappyandy/article/details/130534970