2016-03-24 27 views
-2

Bir QTableWidget ürünüm var ve önceden seçilmiş olan öğeye bağlı olarak öğelerin seçilebilmesi (yalnızca ikinci sütunda aynı içeriğe sahiplerse).QTableWidget'de belirli öğelerin birden çok seçilebilmesine nasıl izin verilir?

Öğeleri seçilebilir yapılıp yapılmayacağını biliyorum. Ancak her şey seçilebilir kalmalı, böylece kullanıcı seçime yeni başlamak için tek bir öğe seçebilir. Sadece vardiya veya ctrl basılı tutularak bir seçime eklenmesi sadece uygun öğelere izin vermeli/seçmelidir.

Seçime ekleme yapmak için yalnızca uygun satırları kabul etmek için nereye başvurabilirim?

Not: PySide kullanıyorum ancak C++ veya PyQt kodundan çalışıyorum.

+0

Belki de QItemSelectionModel – Fabio

+0

sınıflara Sonra yapabilir? Aşırı yükleme seçimi beni yarı yolda bulabilir, ancak ideal olarak, ctrl düğmesine basıldığında fare farenin üzerine geldiğinde ürünlerin görünmesini bile istemiyorum. Cttrl/shift tuşuna her basıldığında ItemIsSelectable işaretini değiştirmek kötü görünüyor. –

+1

"Fare fareyle üzerine geldiğinde öğeler seçilebilir" ile ne demek istiyorsun? Fare, üzerlerinde gezindiğinde seçilebilir öğeler arasında ve seçilemez öğeler arasında herhangi bir fark olduğunu görünmüyor. Sana QItemSelectionModel' 'iki' select' yöntemleri aşırı ve Haklısınız seçilebilir ve seçilemez öğeleri bakmak – Fabio

cevap

-1

QTableWidget.itemSelectionChanged sinyaline bağlanabilir ve seçimden yola çıkarak tablodaki tüm diğer öğelerin Qt.ItemIsSelectable bayraklarını değiştirebilirsiniz.

from itertools import product 

table = QtGui.QTableWidget() 
table.itemSelectionChanged.connect(self.on_itemSelectionChanged) 

@QtCore.pyqtSlot() 
def on_itemSelectionChanged(self): 
    sel_items = self.table.selectedItems() 

    # get all items in table 
    items = [] 
    for r, c in product(range(self.table.rowCount()), range(self.table.columnCount())): 
     items.append(self.table.item(r, c) 

    # Loop through all the items in the table and 
    # set the selection flag based of already selected items. 
    for item in items: 
     if can_be_selected: 
      item.setFlags(item.flags() | QtCore.Qt.ItemIsSelectable) 
     else: 
      item.setFlags(item.flags() & ~QtCore.Qt.ItemIsSelectable) 
+0

Ardından mevcut seçimi değiştirmek için yeni bir öğe seçemezsiniz (shift veya ctrl olmadan). "Can_be_selected", geçerli seçimin yerini aldığı veya uzadığı hava durumuna bağlıdır. –

+0

Yeni bir seçim yapmadan önce mevcut seçiminizi kaldırmak zorundasınız. –