我正面临Pathview的问题。我需要更改path属性来重新组织子项,但是当我这样做时,它会导致所有创建的元素(由模型指定)被销毁并再次创建。
有没有办法在不重新加载内容的情况下做到这一点,或者可能会覆盖'眨眼效应?
示例:
states <- str_extract(text, "\\b[A-Z]{2}(?=\\s+\\d{4,5}$)")
答案 0 :(得分:1)
PathView
似乎使用了这个技巧,在Path
发生变化后强制重新布局。我发现没有理想的方法来做这个,但是要阻止PathView
摧毁你的代表,可以使用中间DelegateModel
来完成。
DelegateModel
为Item
实例化了view
,您可以通过将Item
添加到persistedItems
来选择让Item
持久化-group。
由于我们可能希望使用模型的动态实例化,对于此示例,我只将那些Path
添加到此组,实例化Item
将切换,并删除他们在转换后立即离开小组。
正如我所说的那样:我没有找到(但是看起来并不太多)一种强制重新布局的好方法。所以暂时我会稍微移动一下视图,否则代表的x和y值不会被更新。
如果您的所有persistent
都可见,您可以在Component.onCompleted
- 广告位中将所有import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 1.2
import QtQml.Models 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("PathView path test")
Path {
id: path1
startX: 100; startY: 100
PathLine{ id: line1; x: 300; y: 100 }
}
Path {
id: path2
startX: 100; startY: 100
PathLine{ x: 100; y: 300 }
}
ListModel {
id: pvModel
ListElement{ name: "rectangle" }
ListElement{ name: "rectangle" }
ListElement{ name: "rectangle" }
}
DelegateModel {
id: pvDelegateModel
model: pvModel
delegate: Rectangle {
id: delegate
width: 50
height: 50
color: 'red'
border.width: 1
Component.onCompleted: console.log("Rectangle created")
Component.onDestruction: console.log("Rectangle destroyed")
Connections {
target: button
onStart: delegate.DelegateModel.inPersistedItems = true // Make them persistent befor the switch
onEnd: delegate.DelegateModel.inPersistedItems = false // Make them non-persistent after the switch
}
}
}
PathView {
id: pv
anchors.fill: parent
model: pvDelegateModel
path: path1
clip: true
}
Button {
id: button
width: 100
height: 40
text: "Switch path"
signal start
signal end
onClicked: {
start()
pv.path = (pv.path === path1 ? path2 : path1)
end()
pv.currentIndex +=1 // To force a refresh of the layout
pv.currentIndex -= 1
}
}
}
标记为command
shell
答案 1 :(得分:0)
我不知道它是否只是上述测试用例中的路径,或者是否可以使用真实应用中的路径,但一个选项可能是更改路径的属性而不是更改整条道路。看起来你甚至可以设置路径属性的动画:
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 1.2
Window {
visible: true
width: 640
height: 480
title: qsTr("PathView path test")
Path {
id: pvPath
startX: 100; startY: 100
PathLine{
x: currentPath ? 300 : 100
y: currentPath ? 100 : 300
Behavior on x { SmoothedAnimation { duration: 125 } }
Behavior on y { SmoothedAnimation { duration: 125 } }
}
}
ListModel {
id: pvModel
ListElement{ name: "rectangle" }
ListElement{ name: "rectangle" }
ListElement{ name: "rectangle" }
}
Component {
id: pvDelegate
Rectangle {
width: 50
height: 50
color: "red"
border.width: 1
Component.onCompleted: console.log("Rectangle created")
Component.onDestruction: console.log("Rectangle deleted")
}
}
property bool currentPath;
PathView {
anchors.fill: parent
model: pvModel
delegate: pvDelegate
path: pvPath
}
Button {
width: 100
height: 40
text: "Switch path"
onClicked: currentPath = !currentPath
}
}