【问题标题】:How to make QAbstractTableModel 's data checkable如何使 QAbstractTableModel 的数据可检查
【发布时间】:2013-04-21 15:35:33
【问题描述】:

如何使 QAbstractTableModel 的数据可检查

我想让下面代码中的每个单元格都可以被用户勾选或不勾选,如何修改代码?

根据 Qt 文档:Qt::CheckStateRole 并设置 Qt::ItemIsUserCheckable 可能会被使用,所以任何人都可以提供一个小样本?

import sys                                 
from PyQt4.QtGui import *                              
from PyQt4.QtCore import *

class MyModel(QAbstractTableModel):   

    def __init__(self, parent=None):   

        super(MyModel, self).__init__(parent)   

    def rowCount(self, parent = QModelIndex()):   

        return 2

    def columnCount(self,parent = QModelIndex()) :   

        return 3

    def data(self,index, role = Qt.DisplayRole) :   

        if (role == Qt.DisplayRole):   

            return "Row{}, Column{}".format(index.row() + 1, index.column() +1)   

        return None

if __name__ == '__main__':   

    app =QApplication(sys.argv)   

    tableView=QTableView()   
    myModel = MyModel (None);    
    tableView.setModel( myModel );          
    tableView.show();   
    sys.exit(app.exec_())

【问题讨论】:

    标签: qt pyqt pyside


    【解决方案1】:

    覆盖 MyModel 中的标志函数。

    def flags(self, index)
        return super(MyModel, self).flags(index)|QtCore.Qt.ItemIsUserCheckable
    

    这表示模型中的索引是可检查的。

    然后覆盖数据函数。

    def data(self,index, role = Qt.DisplayRole) :   
        if (role == Qt.DisplayRole):   
            return "Row{}, Column{}".format(index.row() + 1, index.column() +1)
        elif (role==Qt.CheckStateRole):
            # read from your data and return Qt.Checked or Unchecked
        return None
    

    最后,你需要实现 setData 函数。

    def setData(self, index, value, role = Qt.EditRole):
        if (role==Qt.CheckStateRole):
            # Modify your data.
    

    【讨论】:

    • 注意:当他说“从您的数据中读取”和“修改您的数据”时,他指的是您必须创建并记账的 True/False 列表。即 self.checklist = True for _ in xrange(self.rowCount())
    • 按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    相关资源
    最近更新 更多