2010-08-12 9 views
0

J'ai ce tableau:Comment puis-je trouver la QModelIndex pour clé primaire composite donnée, avec QSqlTableModel

QSqlQuery createTblSMS("CREATE TABLE sms_tbl(" 
      "isRead BOOLEAN NOT NULL," 
      "readTime DATETIME," 
      "arrivalTime DATETIME NOT NULL," 
      "sender TEXT NOT NULL," 
      "receiver TEXT NOT NULL," 
      "smsContent TEXT," 
      "PRIMARY KEY(arrivalTime, sender, receiver));", QSqlDatabase::database(mConnectionName)); 

smsModel = new QSqlTableModel(this, QSqlDatabase::database(mConnectionName)); 
smsModel->setTable("sms_tbl"); 
smsModel->select(); 

Comment puis-je trouver la QModelIndex pour clé primaire composite donné, par exemple:

"2010-08 12 12:04:15" "075588455" "077789585" 

Répondre

0

J'ai abandonné sur QSqlTableModel. Mieux vaut sous-classer QAbstractTableModel et masquer tous les accès à la base de données SQL à l'intérieur. Dans ce cas, vous conservez vos clés primaires composites dans une liste, puis utilisez QModelIndex.row() pour référencer l'index de liste de votre clé primaire.

Exemples demandés. Code non testé.

NAME = 0 # Name column in db is model column 0 
EMAIL = 1 # Email address column in db is model column 1 

class MyModel(QAbstractTableModel): 
    def __init__(self): 
     self.rowrefs = [] 

    def data(self, index, role=Qt.DisplayRole): 
     if not index.isValid() or \ 
       not (0 <= index.row() < len(self.tableref)): 
      return QVariant() # if index not valid return empty QVariant 
     myref = self.rowref[index.row()] 
     column = index.column() 
     # insert code to look up the db row based on the row id in myref 
     # and put data in a list 'dbrow' with list indexes matching model column numbers 
     if role == Qt.DisplayRole: 
      if column = NAME: 
       return QVariant(dbrow[NAME]) 
      elif column = EMAIL: 
       return QVariant(dbrow[EMAIL]) 
     etc..... 
+0

Pouvez-vous me donner un exemple de code court, ce serait très utile pour moi. Merci pour votre réponse. – user261882