2017-04-26 18 views
1

Qmlファイルがあり、その中にボタンの画像が表示されています。QML(Qt)ファイルの画像を他の画像に置き換えるにはリソースがありません

Menu.qml私は、フォルダCで絵を持っている場合

(...) 
ToolButton { 
    Image { 
    (...) 
    Image { 
     id: img1 
     source: "qrc:/Images/img_1.png" 
    } 
    } 
} 

は、今私は、したい:/イメージ/、例えばC:/Pic/img_2.png、負荷の成功の後メニュー.qmlは、img_1.png(リソース内)を(リソースではなく)img_2.pngで自動的に置き換えます。

誰かが私を助けてくれますか?
(私の悪い英語のため申し訳ありません)

答えて

2

Imageは、ユーザーがJavaScriptコードを使用してイメージソースを実行時に変更できるようにします。したがって、画像を変更する場合はいつでも、新しいソースURLをimg1.sourceに割り当てることができます。

image.source = 'file:/c:/Pic/img_2.png'; 

ローカルファイルの場合は、file:プロトコルスキームを使用する必要があります。

+0

これをテストしましたか?私は間違っているかもしれませんが、3つのスラッシュが必要であると確信しています。 'file:/// C:/ Pic/img_2.png' – Mitch

+0

' file:/ 'のためにありがとう 私は前方スラッシュを試してみました。まだ動作します.. –

1

私はあなたの質問を理解している場合、あなたはComponent.onCompleted

(...) 
ToolButton { 
    Image { 
    (...) 
    Image { 
     id: img1 
     source: "qrc:/Images/img_1.png" 
     Component.onCompleted: { 
     source = "file://C:/Pic/img_2.png" 
     } 
    } 
    } 
} 
+0

あなたの助けをありがとう。私のqmlファイルには多くの画像があり、各画像**は**(フォルダCの画像が 'id'によって存在する場合)、** **(存在しない場合)**を置き換えることができます。私の先生は一度承認したいと思っていました。だから、私はこの方法を選択している:関数を記述してそのフォルダをブラウズし、適切なファイル名を全てリストアップして置き換える。 'var pngName = arrayIcon [i]; var controlName = pngName.slice(0、-4); eval(controlName).source = pathPng + pngName; ロード成功後、この関数を呼び出します。現在でも、まだうまく機能しています。 –

0

Managing Resource Files with the Qt Resource System

を知らせるために取り付けることにより、ボタンをロードした後にプロパティを変更することができます... QMLで相対パスで指定されたすべてのファイルになります代わりにリソースシステムからロードされます。リソースシステムの使用は、QMLレイヤーに対して完全に透過的です。つまり、すべてのQMLコードは相対パスを使用してリソースファイルを参照する必要があり、qrcスキームは使用しないでください。このスキームは、リソースファイルを参照するためのC++コードからのみ使用する必要があります。

リソースファイルの外部にイメージをロードするために必要なのは、絶対パスを使用することです。

関連する問題