2010-11-11 32 views
5

PyQt kullanarak bir QTreeView seçiminin seçilen sinyaline bağlanmaya çalışıyorum. Bunu geçmişte yaptım (bir QTableView için) ve başarılı oldu. Ancak şimdi çalışmak için benzer kodları alamıyorum.PyQt QTreeView: Seçime bağlanmaya çalışılıyor Değiştirilen sinyal

Aşağıdaki kod örneğinde, genişletilmiş ve daraltılmış sinyallere başarılı bir şekilde bağlanıyorum, ancak seçmeShanged veya etkinleştirilmiş sinyallere değil. Birisi bana yanlış yaptığımı söyleyebilir mi? Teşekkürler.

cevap

13

Tamam, anlaşıldı (çoğunlukla kaza ile).

init numaralı bağlantıda bağlantı kurduğumdan, ancak yalnızca bu QTreeView için modeli ayarladıktan sonra geçerli bir seçim modeli bulunmuyor.

1) yayan cisim QTreeView en selectionModel olmak değiştirilmesi gerekiyordu:

çalışması için iki değişiklik yapmak zorunda kaldı. Ben neden bilmiyorum, ancak web'de biraz (nadir) örnekleri Bana bunun üst sınıf çağırır QTreeView böyle bir setModel yöntemini geçersiz zorunda

ve ) vaka olabileceğini öne sürmüştür 'setModel yöntemi ve daha sonra bağlantıları daha sonra yapar.

Yani yeni kod şuna benzer:

class ShaderDefTreeView(QtGui.QTreeView): 
    """ 
    Overrides the QTreeView to handle keypress events. 
    """ 

    #--------------------------------------------------------------------------- 
    def __init__(self, parent=None): 
     """ 
     Constructor for the ShaderDefTreeView class. 
     """ 
     super(ShaderDefTreeView, self).__init__(parent) 


    #--------------------------------------------------------------------------- 
    def setModel(self, model): 
     super(ShaderDefTreeView, self).setModel(model) 
     self.connect(self.selectionModel(), 
        QtCore.SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), 
        self.store_current_selection) 


    #--------------------------------------------------------------------------- 
    def store_current_selection(self, newSelection, oldSelection): 
     print "changed" 
3

Eğer böyle bir şey yapabilirsiniz deklaratif kullanıyorsanız:

self.ui = uic.loadUi(main_path, self) 
self.ui.tree.selectionModel().selectionChanged.connect(self.item_selection_changed_slot)