2017-07-03 16 views
0

素材デザインを有効にしました(暗いテーマ)。ItemDelegateの背景とテキストの色を変更する

一部のチュートリアルでは、背景色のプロパティを使用して独自のRectangleアイテムをカスタムカラーで設定するように指示していました。このスクリーンショットのように:

Should later look like this

しかし、この技術を使用して私はもうこれらの素敵な波及効果を持っていけません。私がしたいのは、すべてのアイテムの背景とテキストの色を変更することだけでした。

私は運のない背景のプロパティを変更しようとしました。起動時に、デバッグ出力はバックグラウンドでカラープロパティがないことを伝えました。

私はBindingsを使って "ハッキー"な方法を考え出しました...今、プロパティが存在します!

これは私の目標を達成する最善の方法ですか?リップル効果はクリックで表示されますが、私はこれで良い感じはありません。私はバインディングを使うときにそのプロパティがなぜ存在するのか理解できません。なぜなら、通常のデータバインディングを使用しているときにそれらが存在しない理由です。

ItemDelegate { 
    width: ListView.view.width 
    height: contentItem.implicitHeight + 10 

    topPadding: 5 
    bottomPadding: 5 

    highlighted: ListView.view.currentIndex === model.index 

    //background.color: highlighted ? "#81A3CF" : "#B3B2B2" 
    Binding { 
     target: background 
     property: "color" 
     value: highlighted ? "#81A3CF" : "#B3B2B2" 
    } 

    text: model.index + (highlighted ? " [highlighted]" : "") 

    //contentItem.color: "black" 
    Binding { 
     target: contentItem 
     property: "color" 
     value: "black" 
    } 

    onClicked: { 
     if(ListView.view.currentIndex === model.index) 
      ListView.view.currentIndex = -1; 
     else 
      ListView.view.currentIndex = model.index 
    } 
} 

答えて

1

理由は簡単です。

backgroundItemとして宣言されている - そしてそれはcolorがあり、具体的なItemを割り当てられる前に、あなたが、それを変更することはできませんのでItemは、何のcolorを持っていません。したがって、QMLファイルを実行すると、すべてが作成されるまで、Rectangleはまだ使用できません。これは、Bindingが色を設定するときです。

あなたは何にも束縛されることを必要としない場合は、別のソリューションを使用することです:

Component.onCompleted: background.color = 'green' 

そうでなければ、私は(これは意見です!)細かいことBinding -trickを考えます

+0

ああ、私はバックグラウンドのためにBindingにとどまるので、強調表示されているためです。私は、強調された手段やonClickedイベントのように、自分自身でこのような基本的なことを実装していることは非常に悲しいです。そのようなものは図書館にとどまるべきだと確信しています。 –

0

あなたがアイテムデリゲートの背景色を変更する理由がわかりません。 ListViewで選択した項目を視覚的に強調表示する通常の方法は、コンポーネント(通常は長方形を使用)を作成し、それをListViewのhighlightプロパティに割り当て、次にListViewのhighlightFollowsCurrentItemをtrueに設定することです。 ListViewは、currentIndexが変更されたときにハイライトコンポーネントを適切に非表示にして表示し、必要に応じてさまざまなトランジションエフェクトを指定することができます。

+0

アイテムに背景色もある場合はどうなりますか?ハイライト矩形はアイテムの下に隠されませんか? –

+0

はい、私はそれを信じています。すべてのアイテムの背景色が同じであるか、または異なるのですか?私はListViewの子としてListViewのサイズの四角形を使用していましたが、リストの背景を提供しています。この場合、背景の上にハイライトの矩形が表示されます。しかし、異なる色の行が必要な場合は、動作しません。 – WaltPurvis

関連する問題