Qt 如何在Qml中更改视图?
我的程序将以3种方式显示图片:ListView、GridView和PathView。程序将有3个按钮,每种类型和当我按下按钮的ListView图像显示为列表等。。。我可以使用Qml Loader执行此操作:Qt 如何在Qml中更改视图?,qt,qml,Qt,Qml,我的程序将以3种方式显示图片:ListView、GridView和PathView。程序将有3个按钮,每种类型和当我按下按钮的ListView图像显示为列表等。。。我可以使用Qml Loader执行此操作: Loader { id: pageLoader; anchors.fill: parent; source: "pics/PathLayout.qml"} 然后,当我按下按钮时,源将被改变。问题是,它会一次又一次地下载源代码,这是不好的。 另一种方法是不在单独的文件中定
Loader { id: pageLoader; anchors.fill: parent; source: "pics/PathLayout.qml"}
然后,当我按下按钮时,源将被改变。问题是,它会一次又一次地下载源代码,这是不好的。
另一种方法是不在单独的文件中定位视图,而是在main.qml中,将visible设置为false,并使用states change visible设置为true。现在的问题是,我将在开始时实例化所有三个视图,即使我不会更改视图。
我可以这样做吗?例如,程序以GrisView开始,只有当我按下按钮并以某种方式记住此视图时,它才会下载另一个视图,这样当我再次需要它时,我就不会再下载它了?您可以将这两种解决方案结合起来
您可以声明一个公共模型、三个加载程序(每种视图类型一个)和三个关联按钮。第一次单击按钮时,激活加载程序(通过这种方式加载视图)。下次单击按钮时,您只能激活/停用加载组件的visible属性。我不清楚为什么会反复下载图像。图像列表(实际数据)是您的模型,而不是视图。这应该只发生一次。根据您的需要,可以在C++或QML中完成。显示模型(视图)的方式与此无关。有一百万种不同的方式可以显示图像。还有一个选择:
StackLayout {
currentIndex: 1
ListView {
model: imageList
}
GridView {
model: imageList
}
PathView {
model: imageList
}
}
因此,对于GUI来说,当您的某些部分可见而其他部分不可见时,这是一种正常的做法,您只需切换visible属性来选择要打印的部分?这是QtQuick/Qt中的常见做法。很多组件都是这样工作的。但你也应该关心你的应用程序的内存使用和性能。检查重载组件的加载器、中继器和实例化器的使用情况。谢谢,但请稍候,当我切换视图时,焦点:true属性不起作用。我怎么办?你的问题不清楚。你是说在不同视图之间切换时键盘焦点不工作?您可以尝试调用
forceActiveFocus()
。