現在、ListViewコントロールを使用してデリゲートの四角形を描画する必要がありました。リストビュー内で一連の長方形を水平または垂直に描画できましたが、問題は長方形の境界線にあります。隣接する長方形の交点の境界線の幅は、幅の2倍です。
デリゲートレクタングルは、Qt Quick Rectangle要素にすぎません。
長方形の片側のみの境界幅を制限することは可能ですか?
片面の色を変えることはできますか? (QLineEditに似たもの-辺に関してボーダーの幅と色を制御できる場所)
よろしく、サントッシュ。
あなたはこのようなカスタムボーダー要素を作ることができます:
CustomBorder.qml
import QtQuick 1.0
Rectangle
{
property bool commonBorder : true
property int lBorderwidth : 1
property int rBorderwidth : 1
property int tBorderwidth : 1
property int bBorderwidth : 1
property int commonBorderWidth : 1
z : -1
property string borderColor : "white"
color: borderColor
anchors
{
left: parent.left
right: parent.right
top: parent.top
bottom: parent.bottom
topMargin : commonBorder ? -commonBorderWidth : -tBorderwidth
bottomMargin : commonBorder ? -commonBorderWidth : -bBorderwidth
leftMargin : commonBorder ? -commonBorderWidth : -lBorderwidth
rightMargin : commonBorder ? -commonBorderWidth : -rBorderwidth
}
}
main.qml
import QtQuick 1.0
Rectangle
{
width: 500
height: 500
color: "grey"
Rectangle
{
anchors.centerIn: parent
width : 300
height: 300
color: "pink"
CustomBorder
{
commonBorderWidth: 3
borderColor: "red"
}
}
Rectangle
{
anchors.centerIn: parent
width : 200
height: 200
color: "green"
CustomBorder
{
commonBorder: false
lBorderwidth: 10
rBorderwidth: 0
tBorderwidth: 0
bBorderwidth: 0
borderColor: "red"
}
}
Rectangle
{
anchors.centerIn: parent
width : 100
height: 100
color: "yellow"
CustomBorder
{
commonBorder: false
lBorderwidth: 0
rBorderwidth: 0
tBorderwidth: 10
bBorderwidth: 10
borderColor: "blue"
}
}
}
この例では、カスタム要素を使用して、すべて、1つまたは2つの辺に境界線を持つさまざまな長方形を作成しました。
ListViewの最も簡単な解決策は、デリゲートに1ピクセルの境界線を与え、次に-1の間隔を使用して、各セルが他のセルと1ピクセルずつ重なるようにすることです。
ListView {
spacing: -1
delegate: Rectangle {
height: 40
width: parent.width
border.width: 1
border.color: "black"
z: listView.currentIndex === model.index ? 2 : 1
...
}
...
}
他のボーダー幅でも同じように機能するはずです。
編集:選択したアイテムの境界線が常に他のアイテムの上にあることを確認できるように、コメントから素敵な拡張機能を追加しました。これを変更して選択を示すと、隣接するデリゲートによって隠されないようにします。
ListViewの項目間に境界線を追加しようとしている場合は、指定されたプロパティ 'spacing'を使用して、各項目間に共通の境界線を確立する必要があります。次に、ListViewに背景を追加して、境界線の色をカスタマイズできます。
例:
ListView {
spacing: 1 // or whatever you want the border to be
}
...しかし、特定の境界線が本当に必要な場合は、常に長方形を使用して独自の境界線を作成できます。
Item { // this is your 'rectangle'
Rectangle { // the main thing
id: rec
anchors.fill: parent
anchors.leftMargin: 2
anchors.rightMargin: 5
// etc
}
Rectangle { // a border example
anchors.right: rec.right
height: parent.height
width: 5
color: "red"
// etc
}
}
少し遅れて回答しましたが、受け入れられた解決策は、長方形のジオメトリの外側に境界を描画します。これは、場合によっては問題になる可能性があります。
これを行う別の方法は、次のようなことです。
// CustomBorderRect.qml
import QtQuick 2.12
Item
{
property alias color: innerRect.color
property alias borderColor : borderRect.color
property int borderWidth: 0
property int lBorderwidth : borderWidth
property int rBorderwidth : borderWidth
property int tBorderwidth : borderWidth
property int bBorderwidth : borderWidth
Rectangle
{
id: borderRect
anchors.fill: parent
Rectangle
{
id: innerRect
anchors {
fill: parent
leftMargin: lBorderwidth
rightMargin: rBorderwidth
topMargin: tBorderwidth
bottomMargin: bBorderwidth
}
}
}
}
これは次のように使用できます:
CustomBorderRect
{
width : 50
height: 30
color: "lightseagreen"
lBorderwidth: 0
rBorderwidth: 5
tBorderwidth: 5
bBorderwidth: 0
borderColor: "lightyellow"
}
このようにして、ボーダーは指定されたジオメトリで描画されます。