1

我正在尝试制作一个基于 QML 的字典应用程序。它通过 XML RESTful API 获取单词定义并将它们显示在 ListView 中。我让它在这种基本模式下工作。但现在我正在尝试为 ListView 实现两种状态:具有定义的标准视图和搜索失败时的“您的意思是”类型建议列表。

我当前的 ListView 代码是这样的:

ListView
{
    SuggestionModel{id:suggestionModel; currentWord : "test"}
    SuggestionDelegate{id:suggestionDelegate}
    model : XmlModel{id: standardModel; currentWord : "test"}
    delegate : ListDelegate{id:standardDelegate}
    clip : true
    anchors.top : hbox.bottom
    y : hbox.height + 3
    width : parent.width
    height : parent.height - hbox.height
        id : list
        states :
                State { name: "suggestion"; when: list.model == suggestionModel ||
                        list.model.status ==  XmlListModel.Ready && list.count == 0
                PropertyChanges {
                    target: list
                    model : suggestionModel
                    delegate : suggestionDelegate
                }
            }

        focus : true
        keyNavigationWraps : true
    }

这给出了这个错误:

Unable to assign QObject* to QDeclarativeComponent*

PropertyChanges宣言。还有一个绑定循环,但这并不是我无法解决的问题。我的问题是如何定义状态。我也无法在 State 声明中实例化模型和委托,因为解释器会抱怨创建特定于状态的对象。

4

2 回答 2

2

SuggestionDelegate 正在被实例化。委托属性需要一个组件,它将为它显示的每个项目实例化自己。因此,要提供一个组件而不是实例,您需要将 SuggestionDelegate 包装在一个组件中,并在 PropertyChanges 中使用组件 ID:

Component {
    id: suggestionDelegate
    SuggestionDelegate { }
}
于 2010-09-22T23:17:36.593 回答
0

尽管 Martin 的解决方案解决了我遇到的问题,但我为 UI 提出了更好的设计。由于定义和建议视图是互斥的,我将每个视图实现为具有相同几何形状并根据当前状态显示或隐藏的自己的项目。这也允许漂亮的过渡动画。

于 2010-09-23T13:03:20.960 回答