class PageTableModel(QAbstractTableModel, object): def __init__(self, parent=None): super(PageTableModel, self).__init__(parent) self._parent = parent self._page_table = PageTable(self._parent.mem) self.headers = [u'页号', u'块号'] def headerData(self, section, orientation, role=Qt.DisplayRole): if role == Qt.DisplayRole and orientation == Qt.Horizontal: return self.headers[section] def rowCount(self, index=None, *args, **kwargs): return len(self._page_table.table) def columnCount(self, index=None, *args, **kwargs): return 2 def data(self, index, role=Qt.DisplayRole): row, col = index.row(), index.column() if not index.isValid() \ or not (0 <= row < self.rowCount()) \ or not (0 <= col < self.columnCount()): return QVariant() page = self._page_table.table.keys()[row] block = self._page_table.get_block(page) if role == Qt.DisplayRole: if col == 0: return QVariant(page) elif col == 1: return QVariant(block) elif role == Qt.TextAlignmentRole: return Qt.AlignLeft | Qt.AlignVCenter return QVariant() def register(self, blocks): self._page_table.register(blocks) self.emit(SIGNAL('dataChanged(QModelIndex, QModelIndex)'), QModelIndex(), QModelIndex()) def release(self, pages): self._page_table.release(*pages) self.emit(SIGNAL('dataChanged(QModelIndex, QModelIndex)'), QModelIndex(), QModelIndex())
def __init__(self, parent=None): super(PageTableModel, self).__init__(parent) self._parent = parent self._page_table = PageTable(self._parent.mem) self.headers = [u'页号', u'块号']