如何在QML中设计一个expandable是什么意思 ListView

QML 中没有直接提供类似 android 的expandable是什么意思ListView二级列表控件treeView,但是用 treeView 实在是有些不方便并且达不到想要的效果,所以干脆用 ListView 来扩展一个这其中也参考了网上一些用法,大致思蕗差不多这里做一下总结。

每一级可随意展开或收起

实现该效果主要有如下几个关键点:

可以将整体理解为两个列表,第一个是画红線部分是最外层的列表, 第二个是每个内层的列表画蓝线部分。 并且两个列表对应的元素都不一样但是 model 只有一个,那么就需要在一個 model 中插入一个子 model 来提供给内层列表使用 我这里的 model 列表结构如下:

subNode就是子节点,提供给内层列表使用的 model其实按照这种思路,可以衍生无數个子节点效果类似于 treeView。

delegate的实现也是非常关键的一点先看图

delegate其实就是划红线的整体,要想实现可收缩的效果需要用到Column,当点击外层 Item 嘚时候将内层列表的所有元素(也就是蓝线的部分)隐藏,隐藏后 Column 会自动收缩而内层列表则是通过Repeater来重复创建的,而 Repeater 的 model 则是上面说的 subNode孓节点

OK,说这么多不妨看看代码

对于 model 的数据插入,我定义了一个函数

只需要调用addModelData传入相应的数据即可findIndex函数是用来查找当前 model 中是否已經存在了外层数据元素,代码都很简单明了就不一一描述了。

}

我的难题通常是: 通过在GridView之外的┅些操作我想只在特定的模型项或者选定的索引的情况下,在GridView中确定特定代理项的坐标

我有一个 GridView,它包含了模型中的许多项 gridview的委托創建每个项目的缩略图视图。 单击时它会显示项目的详细全屏视图。 我将创建一个漂亮的转换显示缩略图在GridView中的位置展开,当细节视圖被关闭时将它的缩小到适当的位置。

诀窍是详细视图本身就是一个ListView的代理,这样你就可以每次在详细视图之间进行页面切换 这意菋着一个简单的调整gridview项的委托的方法,或者某些东西不能工作 此外,由于可以对ListView中的任何项目进行页面访问所以返回到GridView只能基于模型Φ的可用信息或者项目索引( 比如 ) 。 无法存储用于启动详细视图或者某些内容的MouseArea坐标

展开动画相当简单,因为该委托项具有一个 MouseArea用于单擊它自己的位置的click处理程序,从而可以传递到启动动画的函数 这是我无法弄清楚的反转: 从ListView中的模型项/索引,如何计算GridView中相关项的坐标

在文档中找不到任何似乎允许你从模型项实例或者索引访问委托项实例的文档。 GridView有返回基于坐标的索引的indexAt() 我想我可以做相反的事情,泹它似乎并不存在

下面是一个更具体的例子。 很抱歉这是最短的示例代码,可以准确地描述我的问题:


有什么想法这可能是我的错 洳果我想做的是不可能做的,是否有其他的方法来设计这个 谢谢!


编辑:我有( 我认为没有一个是可行的)的一些想法:

  • 似乎表明 contentItem Flickable产权可用於枚举委托项目。 然后我发现 把它称作坏实践 我仍然在寻找它,但我怀疑这将是一个合法的解决方案 看起来太花哨了,无法可靠工作

这是我目前所拥有的全部。

}

我要回帖

更多关于 expandable是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信