[Interest] QML id
Igor Mironchik
igor.mironchik at gmail.com
Mon Apr 11 17:03:51 CEST 2016
Hi,
I've found solution better...
Row {
id: top
height: offset
// top letters
Item { width: offset; height: offset; }
Repeater {
model: [ "A", "B", "C", "D", "E", "F", "G", "H" ]
delegate: Text {
width: cellWidth
height: offset
text: modelData
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
Item { width: offset; height: offset; }
}
Column {
y: top.y + top.height
Repeater {
model: 8
delegate: Text {
width: offset
height: cellHeight
text: 8 - index
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
}
Grid {
id: grid
rows: 8
columns: 8
x: offset
y: top.y + top.height
Repeater {
model: chessBoard
delegate: Cell {
cellColor: model.CurrentPieceColor
chessX: index % 8
chessY: index / 8
onClicked: board.clicked( x, y )
onHovered: board.hovered( x, y )
objectName: "c"+ chessX + chessY
width: cellWidth
height: cellHeight
source: model.CellImageSource
}
}
}
Column {
y: grid.y
x: grid.x + grid.width
Repeater {
model: 8
delegate: Text {
width: offset
height: cellHeight
text: 8 - index
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
}
Row {
id: bottom
height: offset
y: grid.y + grid.height
// top letters
Item { width: offset; height: offset; }
Repeater {
model: [ "A", "B", "C", "D", "E", "F", "G", "H" ]
delegate: Text {
width: cellWidth
height: offset
text: modelData
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
Item { width: offset; height: offset; }
}
On 11.04.2016 17:06, Gian Maxera wrote:
>> On 11 Apr 2016, at 14:49, Igor Mironchik <igor.mironchik at gmail.com> wrote:
>>
>> Hello,
>>
>> Thank you.
>>
>> I successfully drawn chess board. Nice.
>>
>> Column {
>> spacing: 0
>> Row {
>> // top letters
>> Item { width: offset; height: offset; }
>> Repeater {
>> model: [ "A", "B", "C", "D", "E", "F", "G", "H" ]
>> delegate: Text {
>> width: cellWidth
>> height: offset
>> text: modelData
>> horizontalAlignment: Text.AlignHCenter
>> verticalAlignment: Text.AlignVCenter
>> }
>> }
>> Item { width: offset; height: offset; }
>> }
>> // Rows with cells
>> Repeater {
>> model: 8
>> delegate: Row {
>> id: row
>> property int rowIndex: index
>> // number
>> Text {
>> width: offset
>> height: cellHeight
>> text: 8 - index
>> horizontalAlignment: Text.AlignHCenter
>> verticalAlignment: Text.AlignVCenter
>> }
>> // first row of chess board
>> Repeater {
>> model: 8
>> delegate: Cell {
>> cellColor: ( row.rowIndex % 2 === 0
>> ? ( index % 2 === 0 ? "white" : "lightgray" )
>> : ( index % 2 === 0 ? "lightgray" : "white" ) );
>> chessX: index; chessY: row.rowIndex;
>> onClicked: board.clicked( x, y );
>> onHovered: board.hovered( x, y );
>> objectName: "c"+ chessX + chessY;
>> width: cellWidth;
>> height: cellHeight;
>> }
>> }
>> // number
>> Text {
>> width: offset
>> height: cellHeight
>> text: 8 - index
>> horizontalAlignment: Text.AlignHCenter
>> verticalAlignment: Text.AlignVCenter
>> }
>> }
>> }
>> Row {
>> // top letters
>> Item { width: offset; height: offset; }
>> Repeater {
>> model: [ "A", "B", "C", "D", "E", "F", "G", "H" ]
>> delegate: Text {
>> width: cellWidth
>> height: offset
>> text: modelData
>> horizontalAlignment: Text.AlignHCenter
>> verticalAlignment: Text.AlignVCenter
>> }
>> }
>> Item { width: offset; height: offset; }
>> }
>> }
>>
>> But now I need place pieces on board.
>>
>> In my old code I used
>>
>> Figure {
>> source: "qrc:/img/pawn-white.png"
>> x: c06.x
>> y: c06.y
>> objectName: "pawn-white-1"
>> width: cellWidth
>> height: cellHeight
>> }
>>
>> Where c06 is id. Is it possible to bind x to x property of Cell by objectName?
> I think so, but instead of bind x and y … I’ll try to change the parent. There is also ParentAnimation for animate the changing.
> And then, you can use the anchors for center the Figure in the parent.
>
> Figure {
> anchors.centerIn: parent
> }
>
> But I don’t know if QML got some built-in to find an object by name.
>
>
>> Thank you.
>>
>> On 11.04.2016 16:02, Gian Maxera wrote:
>>> Column {
>>> spacing: 0
>>> Row {
>>> // top letters
>>> EmptyItem { // use fixed width here so you can align the text }
>>> Repeater {
>>> model: [“A”, “B”, … “H”]
>>> delegate: DisplayTheLetter { … }
>>> }
>>> EmpyItem { }
>>> }
>>> // Rows with cells
>>> Repeater {
>>> model: 8
>>> delegate: Row {
>>> // number
>>> Text {
>>> // use fixed width and align left the text
>>> // vertical alignment with anchors
>>> anchors.verticalCenter: parent.verticalCenter
>>> text: index+1
>>> }
>>> // first row of chess board
>>> Repeater {
>>> model: chessBoardModel[index]
>>> delegate: ASingleCellOfChessBoard { … }
>>> }
>>> }
>>> }
>>> Row {
>>> // bottom letters
>>> EmptyItem { }
>>> Repeater {
>>> model: [“A”, “B”, … “H”]
>>> delegate: DisplayTheLetter { … }
>>> }
>>> EmpyItem { }
>>> }
>>> }
More information about the Interest
mailing list