Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何在Qml中更改视图?_Qt_Qml - Fatal编程技术网

Qt 如何在Qml中更改视图?

Qt 如何在Qml中更改视图?,qt,qml,Qt,Qml,我的程序将以3种方式显示图片:ListView、GridView和PathView。程序将有3个按钮,每种类型和当我按下按钮的ListView图像显示为列表等。。。我可以使用Qml Loader执行此操作: Loader { id: pageLoader; anchors.fill: parent; source: "pics/PathLayout.qml"} 然后,当我按下按钮时,源将被改变。问题是,它会一次又一次地下载源代码,这是不好的。 另一种方法是不在单独的文件中定

我的程序将以3种方式显示图片:ListView、GridView和PathView。程序将有3个按钮,每种类型和当我按下按钮的ListView图像显示为列表等。。。我可以使用Qml Loader执行此操作:

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()