PyQt(Python+Qt)學習隨筆:Model中項的標記flags取值及枚舉類型Qt.ItemFlag


在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標記,則對項操作的結果是未知的

老猿Python,跟老猿學Python!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM