class StringListModel(QAbstractListModel): def __init__(self, stringList, parent=None): super(StringListModel, self).__init__(parent) self.stringList = QStringList(stringList) # int rowCount(const QModelIndex &parent = QModelIndex()) const; # QVariant data(const QModelIndex &index, int role) const; # QVariant headerData(int section, Qt::Orientation orientation, # int role = Qt::DisplayRole) const; def rowCount(self, parent=QModelIndex()): return self.stringList.count() def data(self, index, role=Qt.DisplayRole): if (not index.isValid()): return QVariant() if (index.row() >= self.stringList.count): return QVariant() if (role == Qt.DisplayRole): return self.stringList[index.row()] else: return QVariant() def headerData(self, section, orientation, role=Qt.DisplayRole): if (role != Qt.DisplayRole): return QVariant() if (orientation == Qt.Horizontal): return QString("Column %1").arg(section) else: return QString("Row %1").arg(section)
class StringListModel(QAbstractListModel): def __init__(self, stringList, parent=None): super(StringListModel, self).__init__(parent) self.stringList = QStringList(stringList) # int rowCount(const QModelIndex &parent = QModelIndex()) const; # QVariant data(const QModelIndex &index, int role) const; # QVariant headerData(int section, Qt::Orientation orientation, # int role = Qt::DisplayRole) const; # 编辑功能用到的两个函数 # Qt::ItemFlags flags(const QModelIndex &index) const; # bool setData(const QModelIndex &index, const QVariant &value, # int role = Qt::EditRole); def rowCount(self, parent=None, *args, **kwargs): return self.stringList.count() def data(self, index, role=Qt.DisplayRole): if (not index.isValid()): return QVariant() if (index.row() >= self.stringList.count): return QVariant() if (role == Qt.DisplayRole or role == Qt.EditRole): return self.stringList[index.row()] else: return QVariant() def headerData(self, section, orientation, role=Qt.DisplayRole): if (role != Qt.DisplayRole): return QVariant() if (orientation == Qt.Horizontal): return QString("Column %1").arg(section) else: return QString("Row %1").arg(section) # 以下是实现编辑功能添加的两个函数 def flags(self, index): if (not index.isValid()): return Qt.ItemIsEnabled return super(StringListModel, self).flags(index) | Qt.ItemIsEditable def setData(self, index, value, role=Qt.DisplayRole): if (index.isValid() and role == Qt.EditRole): self.stringList.replace(index.row(), value.toString()) self.emit(SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index) return True return False
def _create_control ( self, parent ): # If the caller provided a default path instead of a default directory # and filename, split the path into it directory and filename # components. if ((len( self.default_path ) != 0) and (len( self.default_directory ) == 0) and (len( self.default_filename ) == 0)): default_directory, default_filename = \ os.path.split( self.default_path ) else: default_directory = self.default_directory default_filename = self.default_filename # Convert the filter: keep = True filters = QStringList() for f in self.wildcard.split( '|' ): if keep and f: filters << f keep = not keep # Set the default directory: if not default_directory: default_directory = QDir.currentPath() dlg = QFileDialog( parent, self.title, default_directory ) dlg.setViewMode( QFileDialog.Detail ) dlg.selectFile( default_filename ) dlg.setFilters( filters ) if self.wildcard_index < filters.count(): dlg.selectFilter( filters[ self.wildcard_index ] ) if self.action == 'open': dlg.setAcceptMode( QFileDialog.AcceptOpen ) dlg.setFileMode( QFileDialog.ExistingFile ) elif self.action == 'open files': dlg.setAcceptMode( QFileDialog.AcceptOpen ) dlg.setFileMode( QFileDialog.ExistingFiles ) else: dlg.setAcceptMode( QFileDialog.AcceptSave ) dlg.setFileMode( QFileDialog.AnyFile ) return dlg
def _initModel(self): from PyQt4.QtCore import QStringList self._reposModel.clear() stringList = QStringList([u"Active", u"Path", u"Auto Update", u"Status"]) self._reposModel.setColumnCount(stringList.count()) self._reposModel.setHorizontalHeaderLabels(stringList)
class StringListModel(QAbstractListModel): def __init__(self,stringList,parent = None): super(StringListModel, self).__init__(parent) self.stringList = QStringList(stringList) # int rowCount(const QModelIndex &parent = QModelIndex()) const; # QVariant data(const QModelIndex &index, int role) const; # QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; # // 编辑功能用到的两个函数 # Qt::ItemFlags flags(const QModelIndex &index) const; # bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); # # // 插入和删除行用到的两个函数 # bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()); # bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()); def rowCount(self,parent= QModelIndex()): return self.stringList.count() def data(self,index,role= Qt.DisplayRole): if (not index.isValid()): return QVariant() if (index.row() >= self.stringList.count): return QVariant() if (role == Qt.DisplayRole): return self.stringList[index.row()] else: return QVariant() def headerData(self,section, orientation, role= Qt.DisplayRole): if (role != Qt.DisplayRole): return QVariant() if (orientation == Qt.Horizontal): return QString("Column %1").arg(section) else: return QString("Row %1").arg(section) # 以下是实现编辑功能添加的两个函数 def flags(self,index): if (not index.isValid()): return Qt.ItemIsEnabled return super(StringListModel, self).flags(index) | Qt.ItemIsEditable def setData(self, index, value, role= Qt.DisplayRole): if (index.isValid() and role == Qt.EditRole): self.stringList.replace(index.row(), value.toString()) self.emit(SIGNAL("dataChanged(QModelIndex,QModelIndex)"),index, index) return True return False # 以下是插入和删除行用到的两个函数 def insertRows(self,position, rows, parent = QModelIndex()): self.beginInsertRows(QModelIndex(), position, position+rows-1) for i in range(rows): self.stringList.insert(position, "") self.endInsertRows() return True def removeRows(self,position, rows, parent = QModelIndex()): self.beginRemoveRows(QModelIndex(), position, position+rows-1) for i in range(rows): self.stringList.removeAt(position) self.endRemoveRows() return True