How to make QML ListView align bottom-to-top/bg: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
[[Category:Snippets]]<br />[[Category:HowTo]]<br />[[Category:Developing_with_Qt::Qt Quick]]<br />[[Category:Developing_with_Qt::Qt Quick::QML]]
[[Category:Snippets]]
[[Category:HowTo]]
[[Category:Developing_with_Qt::Qt Quick]]
[[Category:Developing_with_Qt::Qt Quick::QML]]


'''Български''' [[:How_to_make_QML_ListView_align_bottom-to-top|English]]
'''Български''' [[:How_to_make_QML_ListView_align_bottom-to-top|English]]
Line 7: Line 10:
По принцип QML ListView подравнява елементите съм по тяхната горна страна. Новите елементи се добавят отдолу. В някои случаи обаче, примерно за реализация на прозорец, показващ разговор, може да искате по-различно подреждане - елементите се подравняват по долната си страна и новите елементи също се добавят там.
По принцип QML ListView подравнява елементите съм по тяхната горна страна. Новите елементи се добавят отдолу. В някои случаи обаче, примерно за реализация на прозорец, показващ разговор, може да искате по-различно подреждане - елементите се подравняват по долната си страна и новите елементи също се добавят там.


Нормално ListView изглежда ето така:<br />[[Image:http://gri.not-censored.com/normal-listview.png|http://gri.not-censored.com/normal-listview.png]]
Нормално ListView изглежда ето така:
[[Image:http://gri.not-censored.com/normal-listview.png|http://gri.not-censored.com/normal-listview.png]]


== Решението ==
== Решението ==
Line 17: Line 21:
* За да може новите елементи да се появяват отдолу, винаги ги вкарвайте на позиция 0, вместо да ги добавяте в края.
* За да може новите елементи да се появяват отдолу, винаги ги вкарвайте на позиция 0, вместо да ги добавяте в края.


След като направите тези неща, трябва да получите нещо такова:<br />[[Image:http://gri.not-censored.com/listview-bottom-to-top.png|http://gri.not-censored.com/listview-bottom-to-top.png]]
След като направите тези неща, трябва да получите нещо такова:
[[Image:http://gri.not-censored.com/listview-bottom-to-top.png|http://gri.not-censored.com/listview-bottom-to-top.png]]


== Примерен код ==
== Примерен код ==


<code><br />import QtQuick 1.0
<code>
import QtQuick 1.0


Rectangle {<br /> width: 300<br /> height: 300
Rectangle {
width: 300
height: 300


Rectangle {<br /> id: button<br /> color: &quot;red&amp;quot;
Rectangle {
id: button
color: "red"


anchors {<br /> top: parent.top<br /> left: parent.left<br /> right: parent.right<br /> }
anchors {
top: parent.top
left: parent.left
right: parent.right
}


height: 20
height: 20


Text {<br /> anchors.centerIn: parent<br /> text: &quot;Click me to add rows&amp;quot;<br /> }
Text {
anchors.centerIn: parent
text: "Click me to add rows"
}


MouseArea {<br /> anchors.fill: parent<br /> onClicked: {<br /> var row = {<br /> &quot;id&amp;quot;:listModel.count<br /> };
MouseArea {
anchors.fill: parent
onClicked: {
var row = {
"id":listModel.count
};


listModel.insert(0, row);<br /> }<br /> }<br /> }
listModel.insert(0, row);
}
}
}


ListView {<br /> rotation: 180
ListView {
rotation: 180


anchors {<br /> top: button.bottom<br /> bottom: parent.bottom<br /> left: parent.left<br /> right: parent.right<br /> }
anchors {
top: button.bottom
bottom: parent.bottom
left: parent.left
right: parent.right
}


model: ListModel {<br /> id: listModel<br /> }
model: ListModel {
id: listModel
}


delegate: Rectangle {<br /> rotation: 180<br /> width: ListView.view.width<br /> height: 20<br /> color: &quot;green&amp;quot;
delegate: Rectangle {
rotation: 180
width: ListView.view.width
height: 20
color: "green"


Text {<br /> anchors.centerIn: parent<br /> text: model.id<br /> }<br /> }<br /> }<br />}
Text {
anchors.centerIn: parent
text: model.id
}
}
}
}

Revision as of 12:54, 25 February 2015


Български English

Как да накараме ListView да подрежда елементите си от дъното нагоре

По принцип QML ListView подравнява елементите съм по тяхната горна страна. Новите елементи се добавят отдолу. В някои случаи обаче, примерно за реализация на прозорец, показващ разговор, може да искате по-различно подреждане - елементите се подравняват по долната си страна и новите елементи също се добавят там.

Нормално ListView изглежда ето така: http://gri.not-censored.com/normal-listview.png

Решението

Решението е по-просто, отколкото повечето хора си мислят. Ключовата дума е ротация.

  • Завъртете ListView на 180°
  • Също така завъртете делегата на 180°, за да се върне в нормална позиция. Не забравяйте да сложите дължината на делегата, колкото цялата дължина на ListView.view.width! Иначе елементите ще се подравняват на дясно.
  • За да може новите елементи да се появяват отдолу, винаги ги вкарвайте на позиция 0, вместо да ги добавяте в края.

След като направите тези неща, трябва да получите нещо такова: http://gri.not-censored.com/listview-bottom-to-top.png

Примерен код

import QtQuick 1.0

Rectangle {

width: 300
height: 300

Rectangle {

id: button
color: "red"

anchors {

top: parent.top
left: parent.left
right: parent.right
}

height: 20

Text {

anchors.centerIn: parent
text: "Click me to add rows"
}

MouseArea {

anchors.fill: parent
onClicked: {
var row = {
"id":listModel.count
};

listModel.insert(0, row);

}
}
}

ListView {

rotation: 180

anchors {

top: button.bottom
bottom: parent.bottom
left: parent.left
right: parent.right
}

model: ListModel {

id: listModel
}

delegate: Rectangle {

rotation: 180
width: ListView.view.width
height: 20
color: "green"

Text {

anchors.centerIn: parent
text: model.id
}
}
}

}