1

QColumnView入力したい階層データ ソースがあります。データ ソースは、REST インターフェイスを使用してサーバーからデータを読み込みます。

階層が次のようになっているとしましょう。

Car_Manufacturer -> Car_Type -> Specific_Model -> Motor_Type

これを表示するには、 を使用するQColumnView必要があります (これは顧客の要件であるため)。動作は次のようになっているはずです。

プログラムが起動するとCar_Manufacturer、サーバーから が読み込まれます。項目の 1 つをCar_ManufacturerクリックするCar_Typeと、選択した項目Car_Manufacturerがサーバーから読み込まれ、新しい列に表示されます。をもう一度クリックするCar_Manufacturerと、サーバーからデータを再度取得し、列を更新する必要があります。がCar_Typeクリックされると、このおよびのSpecific_Model項目がサーバーから照会され、新しい列にロードされる必要があります... など。Car_ManufacturerCar_type

データソースには次の API があります。

datasource.get_manufacturers(hierarchy)  # hierarchy = []
datasource.get_car_type(hierarchy)  # hierarchy = [manufacturer, ]
datasource.get_specific_model(hierarchy)  # hierarchy = [manufacturer, car_type]
datasource.get_motor_type(hierarchy)  # hierarchy = [manufacturer, car_type, specific_model ]

階層内の各要素は、アイテムの文字列キー表現です。アイテムがクリックされると、現在のアイテムの階層でこれについてコントローラーに通知する必要があります。

データソースを使用して項目がクリックされたときに、QColumnView が 1 つの項目の子を更新するようにするにはどうすればよいですか? 新しい階層レイヤーが追加または削除されたときに、これをどのように柔軟に保つことができますか?

4

2 に答える 2

1

すべてのデータを一度に取得してフィルターで除外できないと仮定すると、ユーザーがQColumnView から選択したものに基づいて、外出先でアイテム モデルを変更 (行の追加削除) する必要があります。

アイテムを削除するには、複数の方法があります。

  • 選択した列のインデックスを使用して、この列の「左側」にあるすべてのアイテムを削除できます。
  • 親 (または祖父母) が行われている選択と一致する項目に基づいて削除できます。

どのオプションを選択するにしても、何らかの方法でアイテム間の関係を反映する必要があります。それまたはQAbstractItemModelから実装しますが、これはやり過ぎだと思います。

于 2015-09-09T16:19:19.283 に答える