nun gehts , es tut was es tun sollte.
hier noch mal die Zusammenfassung.
Ich habe eine Datenbank mit den Feldern
Code: Alles auswählen
datafields = ["id", "name", "height", "owner", "date"]
Die Darstelllung und das Control erfolgt ueber einen QSqltableView.
dieser View soll aber eine Zusatzspalte Checkstat erhalten, ueber die sich einzelne zeilen auswaehlen (und ggf weiterverarbeiten) lassen.
Der Tableview is hat die Spaltenzuordnung
ID, NAME,HEIGHT, OWNER, DATE, CHECKSTAT = range(6)
is editable und nach Spalten sortierbar.
Der Basisdialog dazu enthaelt im init()
Code: Alles auswählen
...
self.model = OptionSqlTableModel(self, self.db)
self.model.setTable("datatable")
self.model.select()
self.model.initCheckstat()
self.tableView.setModel(self.model)
...
Code: Alles auswählen
class OptionSqlTableModel(QSqlTableModel):
def __init__(self, parent = None , db = QSqlDatabase):
print "OptionSqlTableModel::init()"
super(OptionSqlTableModel, self).__init__(parent,db)
self.checkstat = {}
Code: Alles auswählen
def initCheckstat(self):
#in diesem dict wird der status der zeile gespeiert, im init ist die tablelle noch leer
for row in range(self.rowCount(self)):
index = QSqlTableModel.index(self, row, ID )
thisID = self.data(index).toString()
self.checkstat[thisID] = QVariant(Qt.Checked)
Code: Alles auswählen
def data(self, index, role=Qt.DisplayRole):
if index.column() == CHECKSTAT:
if role == Qt.CheckStateRole:
thisrow = index.row()
idIndex = QSqlTableModel.index(self, thisrow, ID)
thisId = QSqlTableModel.data(self, idIndex).toString()
return self.checkstat.get(thisId)
else:
return QSqlTableModel.data(self, index, role)
Code: Alles auswählen
def setData(self, index, value, role = Qt.EditRole):
if index.isValid():
if (index.column() == CHECKSTAT and role == Qt.CheckStateRole):
print "CHECKSTAT:value int ", value.toInt(), "CHECKSTAT:value string: ", value.toString(),
print "CHECKSTAT:value bool ", value.toBool()
thisrow = index.row()
idIndex = QSqlTableModel.index(self, thisrow, ID) #index zur id-spalte
thisId = QSqlTableModel.data(self, idIndex).toString() # gefundene ID
if value.toInt()[0]== 0: # (is checked)
print "value is 0"
self.checkstat[thisId] = QVariant(Qt.Unchecked)
self.emit(SIGNAL("dataChanged(QModelIndex, QModelIndex)"), index, index)
elif value.toInt()[0]== 2: # (is unchecked)
self.checkstat[thisId] = QVariant(Qt.Checked)
self.emit(SIGNAL("dataChanged(QModelIndex, QModelIndex)"), index, index)
else:
QSqlTableModel.setData(self, index, value, role)
return True
return False
Code: Alles auswählen
def headerData(self, section, orientation, role = Qt.DisplayRole):
if section == CHECKSTAT and orientation == Qt.Horizontal:
return QVariant("use this")
else:
return QSqlTableModel.headerData(self, section, orientation, role)
Code: Alles auswählen
def columnCount(self, index):
colcount = QSqlTableModel.columnCount(self)
return colcount + 1
Code: Alles auswählen
def rowCount(self, index):
rowcount = QSqlTableModel.rowCount(self)
return rowcount
gruss dirk