2017-12-15 46 views
3

Mac OSでQT 5.9.1を使用しています。私のプロジェクトは、C++ロジックとQML UIレイヤーを備えたモバイルアプリケーションです。私の.PROファイルで、私はQT QMLリソースファイルが変更後に再コンパイルされない

資源を持っているので、すべてのQMLファイルは、qml.qrcファイルに含まれています+ = qml.qrc私が使用するすべてのリソースファイルのリストがありqml.qrc

インサイドプロジェクトは、そのような絵、アイコンやQMLファイルとして、QT Creatorで、それはOK表示されます:

List of source files

あなたは他のファイルがサブフォルダにある場合、いくつかのQMLファイルがqml.qrcのルート・パスに配置されて見ることができるように、例えば"qrc:/ Elements /"。

qml.qrcのルートにあるファイルを変更すると、ビルド、再構築、またはクリーンビルドを押すと通常は再コンパイルされ、変更が反映されます。私のビルドディレクトリの結果としてqml_qrc.cppが表示されます(このファイルには自分のリソースファイルのcpp表現が含まれており、コンパイルに使用されています)ファイルが更新され、変更が適用され、すべて正常です。

ここには、MainPage.qmlリソースファイルのcpp 16進表現で始まるこのファイルの一部です。

/******************************************* ********************* **リソースオブジェクトコード ** **作成者:リソースコンパイラfor Qtバージョン5.9.1 ** **警告!このファイルのすべての変更は失われます! ************************************************* ****************************/

静的const unsigned char qt_resource_data [] = {// /Users/admin/QtProjects/LazuritApp-TEMP/MainPage.qml
0x0,0x0,0x7,0xd1、0x0の、
0x0,0x1e、0xbb、0x78,0x9c、0xd5,0x19,0x5d、0x6f、0xdc、0x36,0xf2,0x7d、0x7fの、0x5,0x6f、 0xb、0x14,0xbb、0x69,0xa2,0xf5,0xae、0xed、0xa4,0xde、0xa0,0x77,0xf0,0xba、0x49,0x63, 0x20,0x45,0xda、0xda、0x68,0x1e 、0xe、0x45,0xc1,0x95,0xa8,0x15,0x2f、0x5a、0x51,0xa5, 0x24,0xdb、0x5b、0xc3,0x40,0xda、0x2,0xed、0x1,0x79,0x28,0x70,0x68,0x71、 0xcf、0xf7, 0xf、0xdc、0xbb、0x6b、0x1b、0x34,0x4d、0xfa 、0x17,0xb4,0xff、0xa8,0x43,0x52,0x5f、0x94、

..............

しかし、私はに位置して、それらのリソースファイルを変更した場合qml_qrc.cppファイルはリフレッシュされないため、Cleanを試しても再構築しなくても、私のリソースファイルは再構築されません。たとえ "qmakeを手動で実行"してから再構築しても。この状況では、ビルドフォルダを手動で削除する(または、より正確にはqml_qrc.cppファイルを削除する)ことが唯一の方法です。それで、 "Build"を押すと、正しいコードを含む新しいqml_qrc.cppファイルが作成され、私のリソースファイルで行った変更が反映されます。

誰かが私を助けたり、なぜこれが起こり、この状況で私は何ができるのですか?手作業を削除して再構築するのは面倒ですが、すべてのリソースファイルをプロジェクトのルートパスに置くことも良い決断ではありません...

私も

更新QMLを貼り付けしようとした

qml_scenes.depends = $$ PWD/QMLファイル/ OrdersPage.qml

qml_scenes.commands = QMAKE_EXTRA_TARGETS + = qml_scenes

hereと記載されていましたが、それは助けになりませんでした。

+1

これはhttps://stackoverflow.com/questions/47810450/why-are-changes-to-the-qml-code-sometimes-not-reflected-when-hitting-run-andの複製であることを確かめてください。 -h。 – Mitch

+1

QMLコードの変更は、「実行」をクリックして解決する方法と反映されないことがあります(https:// stackoverflow。com/questions/47810450/qml-code-changes-to-the-hitting-run-and-h) – eyllanesc

+0

@Mitchを実行しているがqmakeを実行して再構築しても私の助けにならない大文字と小文字の区別はありませんが、サブフォルダ内のリソースファイルにのみ問題が存在することもあります。すべてがOKです。 –

答えて

2

ok、QTBUでの掘削GSトレース、stackoverflowなどのフォーラム私は何とか私を満足させる解決策を見つけました..

1)スクリプトファイルを作成します(私の場合は、MAS OSで作業中は.shファイル、Windowsでは.batファイル)。 qml.qrcファイルへの "touch"コマンド。

#/ binに/ shの

タッチ

qml.qrc)カスタムビルドステップを追加(Projects->設定を構築>手順をビルドします!私のケースでは、2行が含まれています - >カスタムプロセスの追加ステップ)。作成した.shファイルを選択し、ビルド時に作業ディレクトリを選択します。このカスタムステップを最初に実行する(qmakeとMakeの前に)

3)これで、qmlリソースファイルの変更は、プロジェクトをビルドするたびにコンパイルされます。スクリプトは最初に私たちのqml.qrcファイルに触れます。これにより、修正日が更新され、qml.qrc(したがってqmlリソースも)がmakefile依存関係に追加されます。

)誰かがよりよい解決策を持っている場合は、私に知らせてください

...問題を解決するために、かなりラフな方法のようですが、少なくとも、あなたがそうで、きれいに再構築し、する必要はありません。

0

残念ながら、コメントに記載されているリンクに記載されている解決策は、不完全であるか、破損しているようです。しかし、このように行うことができます:それはどのように動作するかで誰が興味のある人のために

update_qml.target = qml.qrc 
update_qml.commands = echo>>$${update_qml.target} # same as touch 
update_qml.depends = $$files(path/to/resource/files/*, true) # recurse into subdirs 
QMAKE_EXTRA_TARGETS += update_qml 
PRE_TARGETDEPS += $${update_qml.target} 

QMAKE_EXTRA_TARGETSは以下のMakefileのルール生成:だからmake qml.qrcとしてqml.qrcのタイムスタンプを更新するコマンドを発行

qml.qrc: file1 file2 ... 
     echo>>qml.qrc 

を必要です。ターゲットを構築しながら

$(DESTDIR_TARGET): qml.qrc $(OBJECTS) and other stuff ... 
     $(LINKER) flags objects and other stuff ... 

だから今makeユーティリティは、以前のルールを毎回スキャンします:しかし、それは毎回、我々はまた、メインの建物のルールを修正​​を利用して、マニュアルタイピングから私たちを保存します。

関連する問題