2011-11-15 25 views
5

アイテムのサイズを設定してカスタムペイントを行うために使用するアイテムデリゲート(QStyledItemDelegate)を使用して複数選択可能なQListViewがあります。私の要件は非常に簡単です:選択した項目 QTListView with Itemデリゲート - 選択されたアイテムのアイテム行が大きいです。

ための非選択項目

  • 行の高さ60のための

    1. 行の高さ30、これは動作させることはできません。同じため、ステートメントが同じクラスに塗装法のために完璧に動作するかどうかの状態が選択行と非選択を区別する、奇妙である選択されることはありません私のQStyledItemDelegate

      if (option.state & QStyle::State_Selected) 
      { 
          return QSize(100,60); /// <<<<------ NEVER REACHED 
      } 
      else 
      { 
          return QSize(100,30); 
      } 
      

      上のsizehintを使用してみました

      異なるペイントバックグラウンドの行。

      は、それから私は私が私のデリゲート上のsizehintメソッドにアクセス可能な選択モデル(QItemSelectionModel)を作っ

      何か他のものを試してみました。これを使用すると、sizehintが呼び出された行が選択されているかどうかを確認し、正しいサイズが返されていれば正常にクエリできます。しかし、現在は図面が正しい可変サイズで行われます。選択された項目では、図面の高さは60になりましたが、これは正しいですが、その下にある項目と重なっています。つまり、新しいsizeHintサイズはDRAWINGにのみ使用されますが、実際にはQListViewアイテムの背が高くなりません。その項目の1つが変更されたことをlistViewに "更新"するための呼び出しがないようです。私はちょうど項目を大きくする必要はありません、私はその目的のためにになることが必要な項目が必要です。

      初期化時にsizeHintがアイテムの高さにのみ影響するようです。あなたが急にsizeHintの項目のいずれかの高さの値を返すと、新しい高さに合わせるためにリストビューを拡張することはできません。

      一つの興味深い観察:私は私のQListViewにsetResizeMode(QListView ::調整)を設定した場合

      、コントロールへのわずかなサイズ変更はのサイズを固定し、すべての項目の再計算値トリガされます実際の選択された図(常に正しい高さで行われている)は、項目の高さが正しくなったので、下の項目をカスケードしません。これはQLiustView :: Adjustのような "再計算"を引き起こすため、選択の変更に応じて行う必要があります。それ、どうやったら出来るの?

      私が今やっていることは醜いです。私はこれをやるのは方法ではありませんが、私は他の選択肢はありません。私は選択モデルに接続しています - 選択の変更を聞いて、来るとき、私はQlistViewの高さを1だけサイズ変更してから元のサイズに戻します。これは、アイテムのサイズの再計算を生成します(QListView :: Adjust)とすべての外観が正常に動作します。私はちょうどこれを行うことによって気分が悪くなります - アイテムが高さを再計算する原因になる良い方法はありませんQListViewのサイズ変更を偽って?

  • 答えて

    1

    トップのNokia Qtの開発者と確認 - 私は明らかにやってるハックはこの事を成し遂げるための唯一の方法である:

    私が今やっていることは醜いです、と私はそれがだポジティブですこれを行う方法ではない、 しかし、私は他の選択肢がありません。私は選択 モデルに接続しています - 選択の変更を聞いて、彼らが来るとき、私は 私のQlistViewの高さをサイズ変更し、元のサイズに戻る。この は、アイテムの再計算が (setResizeMode(QListView ::調整)サイズを生成し、すべてが見て、正常に動作し

    関連する問題