1

QML ベースの辞書アプリケーションを作成しようとしています。XML RESTful API を介して単語の定義を取得し、それらを ListView に表示します。この初歩的なモードで動作しています。しかし今、ListView に 2 つの状態を実装しようとしています。定義を含む標準ビューと、検索が失敗したときの「もしかして」タイプの提案リストです。

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

マーティンの解決策は私が抱えていた問題を解決しましたが、UI のより良いデザインを思いつきました。定義ビューと提案ビューは相互に排他的であるため、同じジオメトリを持ち、現在の状態に応じて表示または非表示になる独自のアイテムとしてそれぞれを実装しました。これにより、優れた遷移アニメーションも可能になります。

于 2010-09-23T13:03:20.960 に答える