在Model中的項可以通過flags()方法查詢對應項是否能被選擇、拖拽或其他操作,對應的返回值類型為枚舉類型Qt.ItemFlag及該枚舉類型通過OR操作組合起來的類型Qt.ItemFlags。Qt.ItemFlag的取值及含義如下:
可以通過setFlags(Qt.ItemFlags flags) 來設置項的flags標記。
注意:
- itemFlag相關的設置是針對項的,與View中的拖放、編輯、選擇等屬性的設置是獨立的,一個項能否進行拖放、編輯、選擇等,要Model中的項和View的屬性都要能支持拖放、編輯、選擇。案例:
def initMultiColumnModel(self):
self.model = QStandardItemModel()
for row in range(6):
for col in range(5):
item = QStandardItem("row: {row},col: {col}".format(row=row + 1, col=col + 1))
item.setFlags(item.flags() | Qt.ItemIsUserCheckable|Qt.ItemIsUserTristate)
if row==1 and col==0:item.setFlags(item.flags() & ( (Qt.ItemIsEditable|Qt.ItemIsDragEnabled)^0xff))
item.setData(True,Qt.CheckStateRole)
self.model.setItem( row, col,item)
self.listView.setModel(self.model)
上述方法代碼中將項進行初始化,初始化后如果對應視圖支持編輯和拖放,則第2行第1列的項不支持編輯和拖拽。
- 如果想需要能進行復選操作,需要對該項設置適合的ItemFlag並初始化其狀態值。上面案例的
item.setData(True,Qt.CheckStateRole)
就是完成復選框的初始化 - 如果模型實現了hasChildren()方法並返回True但項設置了 Qt.ItemNeverHasChildren標記,則對項操作的結果是未知的