2010-11-18 5 views
1

良い日をさわやか、すべてにQTreeView/QSortFilterProxyModel

は、年間のコードを書いてきたが、まだ少し緑ので、私の構文的に欠けているの質問(複数可);-)

を許してください

私は... PyQt4で "../examples/itemviews" から、つまり "basicsortfiltermodel.pyw" を がPyQt4(とQt)が付属していること(有名な?)パッケージの例の派生物をハッキングしてい

私はちょっとポップアップメニューを追加しました(これをB.pyと呼ぶ)。起動できるのはBasicSort派生からの(これをA.pyと呼ぶ)。

QSortFilterProxyModel()に新しいデータ(新しいレコード)を追加することを訂正していると思います。 (私はこれを考えています。なぜなら、何らかの努力の後で今は何かエラーが発生しているからです。)しかし、私は QTreeViewを更新することができないようです。私はQtのクラスのドキュメントを精練し、 Google'd一体をそれから(笑、それの ルックスから一般的な質問のように思える)。..

今、私は、これは醜いハックですけど、ちょうどました...(エレガンスは後で来ることができる私の理論である)、それは を動作させるためにA.pyの下部にある をしようと、私は世界の「WX」を宣言し、

global wX; 

[...] 
window = Window() 
wX = Window() 
window.setSourceModel(createMailModel(window)) 

私が打ったときように、ボタンを押すと、実行時の "createMailModel"にある "parent"値の保留をより簡単に得ることができます。私は「モデル」のハンドルを取得し、そこから ...とにかく

model = QtGui.QStandardItemModel(0, 17, WinX) 

    addMail(model, "image", 
          "tabl00", 
          etc 
          etc) 

は、..私は、これは.... 作業だと思います。しかしaddMail()を経由して新しいレコードを追加した後、私は、ように見えることはできません自分自身をリフレッシュする self.proxyModel ..私は笑、この愚かな初心者の問題はかなり確信している

を得る....しかしできた誰 ヘルプには、この作業を行う方法についていくつかの光を当てますか?

多くのおかげで、

答えて

2

私はあなたがあなたの元のモデルではないプロキシ一つに新しいアイテムを追加するために持っていると信じています。アイテムが追加されると、プロキシモデルとビューはそれに従って自動的に更新されます。以下の例は、あなたのために働くだろうかどうかを確認してください:!

import sys 
from PyQt4 import QtGui 

class MainForm(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(MainForm, self).__init__(parent) 

     self.setMinimumSize(300, 400) 

     self.model = QtGui.QStandardItemModel() 
     self.sortModel = QtGui.QSortFilterProxyModel() 
     self.sortModel.setSourceModel(self.model) 

     parentItem = self.model.invisibleRootItem() 
     parentItem.appendRow(QtGui.QStandardItem("3")) 
     parentItem.appendRow(QtGui.QStandardItem("1")) 
     parentItem.appendRow(QtGui.QStandardItem("4")) 
     parentItem.appendRow(QtGui.QStandardItem("2")) 

     self.view = QtGui.QListView(self) 
     self.view.setModel(self.sortModel) 
     self.view.setGeometry(0, 0, 200, 400) 

     self.button = QtGui.QPushButton("add items", self) 
     self.button.move(200, 0) 
     self.button.clicked.connect(self.on_button_clicked) 

     self.layout = QtGui.QVBoxLayout(self.centralWidget())   
     self.layout.addWidget(self.view) 
     self.layout.addWidget(self.button) 

     self.sortModel.sort(0) 

    def on_button_clicked(self): 
     parentItem = self.model.invisibleRootItem() 
     parentItem.appendRow(QtGui.QStandardItem("222")) 
     parentItem.appendRow(QtGui.QStandardItem("333")) 
     parentItem.appendRow(QtGui.QStandardItem("444")) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    form = MainForm() 
    form.show() 
    app.exec_() 

if __name__ == '__main__': 
    main() 

希望、これははい、それは確かない

+0

に関しては、できます...ありがとうございました、セルジュ! ;-) – Coleslaw

+0

whoops、...すぐに復帰して...謝罪... – Coleslaw

関連する問題