2011-11-23 22 views
5

PyQTとQTの(非常に)新機能で、近代的な2ペインのメールアプリケーションに似たユーザーインターフェイスをすばやく設計する必要があります。 QListViewに表示する文字列だけではなく、もう少し多くの情報を提供したいと思います。基本的には項目名が太字で、2行下が別のスタイルで記述され、左上にはタグのようなものがありますバッジ。さらに、リストは数秒ごとに更新する必要があります(たぶんほとんどの項目を変更するだけで済みます)ので、毎回データを書き換えたくありません。QListViewのカスタムアイテム

私は様々なマニュアルやチュートリアルで読んだことから、これを達成する方法が異なります。最も一般的に使用されている方法がわかりません(コードを作成したら、 app) - QListViewまたはQListWidgetを使用し、次にQAbstractListModelまたはQStandardItemModelをサブクラス化するオブジェクトおよびメソッド...

答えて

4

あなたのモデルについて考える必要がない、または実際にビュー間で共有したい場合は、その目的のためにQListWidgetを使用します。リストを直接扱うだけで、データはそれ自身の基礎となるモデルに格納されます。 QListWidgetの場合、次のように使用できます。QListWidget.setItemWidget(QListWidgetItem item, QWidget widget) これは、あなたが望むように自分のウィジェットを作成し、テキストとピックスマップの表示にQLabelsを持たせることになります。その後、実行してQListWidgetにそれらを追加します。

# create item widget 
item = QListWidgetItem() 
w = CustomItemWidget() 
w.setTitle = "Title" 
w.setDescription = "Blah blah" 
# would have a QPixmap already cached 
w.setBadgeImage = preCreatedPixmaps['thisBadge'] 
listWidget.insertItem(item) 
listWidget.setItemWidget(item, w) 

プラス側は、あなたはかなり簡単に、より複雑なデリゲートを記述することなく、アイテムの外観を制御することができるということです。 このアプローチの欠点は、モデルを別のビューと実際に共有していないことと、新しいアイテムを追加する必要があるときにウィジェットの作成を管理する必要があることです。このメソッドは、ウィジェットの表示が静的であることを前提としています。彼らは彼らが設定された後に変更するのが好きではありません。何千ものものがあれば遅くなることもあります。 QListViewであなたのアイテムのデリゲートを作成

は、パフォーマンスの観点から、より高速なアプローチですが、もう少し技術的な...

はしかし、そのCに(例えば、ここで参照してください++が、 http://www.qtcentre.org/threads/27777-Customize-QListWidgetItem-how-to?p=131746#post131746を理解しやすいです

Pythonで別の例として、コードは何のタブインデントを持っていないにもかかわらず: http://www.qtcentre.org/archive/index.php/t-31029.html

2

メールのリスト内のデータを手動で変更しない場合は、QStyledItemDelegate(またはQAbstractItemDelegate)のカスタムモデルクラスを簡単に使用できます。上にリンクされているQAbstractItemDelegateドキュメントの例とStar Delegateの例を見てください。

メールリストのデータをインラインで変更する必要があり、電子メールのリストが標準のウィジェットとは十分に異なる場合は、エディタが十分に見えるかどうかを確認するのがかなり難しくなりますプレゼンテーションビュー。それは不可能ではありませんが、それはより困難なものの一つです。

あなたはQStandardItemModelを使用して離脱できます。しかし、私は通常、Qt(あなたのケースでは、QAbstractListModel)ラッパーを使ってドメインモデルを作成することをお勧めします。

+0

提供されたリンクの中には死んでいます – user1767754

関連する問題