2017-05-04 7 views
0

問題文

祖先が不透明度0のときにアイテムをレンダリングすることはできますか?アイテムの祖先が不透明度0の場合、アイテムをレンダリングさせることはできますか?


動機

この質問のための動機は、このother question of mine(私は「隠されたテクスチャ・ソース」問題と呼んでます)。現在私はvisible: falseではなくopacity: 0を使用していますが、これはリンクされた質問と同じ問題を引き起こします。

私がアイテムを隠している理由はthisです。

私はテクスチャソースとして使用する必要がある各アイテムを一度だけ間抜けしていました。 (簡易擬似コード)

texSourceItem.opacity = 1; 
cppItem.update(); // QQuickFramebufferObject 
texSourceItem.opacity = 0; // reset back to 0 

しかし、今、私はまた、このような項目の全体秒殺処分しています:だから隠されたテクスチャ・ソースの問題に対する修正は簡単でした。そして、不透明性が継承されるので、私がcppItemを更新したい場合は、親全体の隠されていないダンスを行う必要があります。次に、2つのテクスチャソース項目がインターロックされたタイミングでunhide-hide手続きを行う可能性があるので、バグを避けるために、現在更新されているcppItemの数を知るカスタム参照カウンタを保持する必要があります。これは私の好みのためには複雑すぎる解決策です。だから私の質問への答えは有益だろう。 documentationから引用し

答えて

0

をこのプロパティが設定されている場合、指定された不透明度も子項目に個別に適用されます。これは、状況によって意図しない影響を与える可能性があります。たとえば、下の2番目の矩形のセットでは、赤い矩形は0.5の不透明度を指定しています。これは、子が不透明度を指定していなくても青い長方形の不透明度に影響します。

あなたはおそらくそれを知っていました。

私は正確に正確に何であるかあなたの状況を理解していないが、私が見ることができる唯一の解決策は、透明Item何の子孫はないようにItem Sを作ることですが、むしろそれは代わりに兄弟です。

もちろん、Item(grand)*の子にアンカーすることはできませんが、依然としてその位置をマップすることはできます。私たちは、たとえばしている場合は、このような状況

を(位置が変更された場合、mapTo/FromItem()を更新するために複雑になるかもしれない、しかしissueには注意してください):

Rectangle { 
    id: rect1 
    color: 'red' 
    anchors.fill: parent 

    Rectangle { 
     id: rect2 

     width: 200 
     height: 200 
     color: 'blue' 
     anchors.centerIn: parent 
     Rectangle { 
      id: rect3 
      width: 50 
      height: 50 
      color: 'green' 
      anchors.centerIn: parent 
     } 
    } 

    MouseArea { 
     anchors.fill: parent 
     onClicked: parent.opacity = !parent.opacity 
    } 
} 

しかし、我々は、我々はこれを行うことができrect2のレンダリングを維持したいです:私たちは今、相対的な位置を追跡する必要があるとして、それは、不便になっrect3について

ShaderEffectSource { 
    sourceItem: rect2 
    sourceRect: Qt.rect(-rect2.x, -rect2.y, rect1.width, rect1.height) 
    anchors.fill: rect1 
} 

。(動的にするには、前に投稿したリンクを参照してください)

ShaderEffectSource { 
    sourceItem: rect3 
    sourceRect: Qt.rect(-rect2.x - rect3.x, -rect2.y - rect3.y, rect1.width, rect1.height) // keep track of all positions -.- 
    anchors.fill: rect1 
} 
+0

Re:ShaderEffectSourceソリューション:試しましたか? 0 '、ShaderEffectSourceはsourceItemとして(またはその子)を使用することはできません。私は 'rect'1'は'不透明度を持っているときことをかなり確信しています。さて、エラーメッセージやクラッシュはありませんが、ShaderEffectSourceには何も描画されません。再:それは私は不透明度の継承をしたいですから、私はちょうどそれがcppItemの更新時に適用したくない、私の場合には動作しません:アイテムに兄弟を作ります。 –

+0

私はそれを試して、私のために投稿として投稿しました。 – derM

関連する問題