找回密码
 立即注册
收起左侧

一个类似ComboBox的组件

4
回复
6708
查看
[复制链接]
累计签到:138 天
连续签到:1 天
来源: 2015-3-19 15:58:07 显示全部楼层 |阅读模式
5Qter豆
import QtQuick 2.4

Rectangle
{
    width: 80; height: 20*(nameModel.count+1)
    ListModel {id:nameModel}

    Column
    {
        anchors.fill: parent

        Rectangle
        {
            property int eUNFOLD:0
            property int eFOLD:1
            property int currentState: eFOLD
            id:sectionHeader
            width: 100; height: 20
            Text {id:headerText; text: "Crypto"; color: "blue"}

            MouseArea
            {
                anchors.fill: parent

                onClicked:
                {
                    if(sectionHeader.currentState==sectionHeader.eFOLD)
                    {
                        nameModel.append({name:"Alice"});
                        nameModel.append({name:"Bob"});
                        sectionHeader.currentState=sectionHeader.eUNFOLD;
                    }
                    else
                    {
                        nameModel.clear();
                        sectionHeader.currentState=sectionHeader.eFOLD;
                    }
                }
            }
        }

        Repeater
        {
            model: nameModel
            delegate: delegate
        }
    }

    Component
    {
        id:delegate

        Text
        {
            id:delegateText
            text: name
            font.pixelSize: 18

            MouseArea
            {
                anchors.fill: parent

                onClicked:
                {
                    headerText.text=delegateText.text;
                    nameModel.clear();
                    sectionHeader.currentState=sectionHeader.eFOLD;   //这里提示“ReferenceError: sectionHeader is not defined”,当然是运行点击“Crypto”,再点击“Alice”时发生错误的
                }
            }
        }
    }
}


最佳答案

查看完整内容

是啊,如果先clear()了,该条目就不在了,后面什么操作都无法执行了。
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2015-3-19 15:58:08 显示全部楼层
wxxzs123 发表于 2015-3-23 08:56
原来是nameModel.clear();引起的,只要把这句话放到sectionHeader.currentState=sectionHeader.eFOLD;后面 ...

是啊,如果先clear()了,该条目就不在了,后面什么操作都无法执行了。
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2015-3-20 10:51:09 显示全部楼层
你可以把component理解为一个单独的qml文件,那么在component组建中是不能使用sectionHeader属性的。
回复

使用道具 举报

累计签到:138 天
连续签到:1 天
2015-3-20 13:34:05 显示全部楼层
yafeilinux 发表于 2015-3-20 10:51
你可以把component理解为一个单独的qml文件,那么在component组建中是不能使用sectionHeader属性的。 ...

那为什么headerText可以访问属性呢?
回复

使用道具 举报

累计签到:138 天
连续签到:1 天
2015-3-23 08:56:26 显示全部楼层
原来是nameModel.clear();引起的,只要把这句话放到sectionHeader.currentState=sectionHeader.eFOLD;后面就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了