Как я могу найти QModelIndex для данного составного первичного ключа, с QSqlTableModel - PullRequest
0 голосов
/ 12 августа 2010

У меня есть эта таблица:

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();

Как найти QModelIndex для данного составного первичного ключа, например:

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

1 Ответ

0 голосов
/ 19 августа 2010

Я отказался от QSqlTableModel.Лучше создать подкласс QAbstractTableModel и скрыть весь доступ к базе данных SQL внутри него.В этом случае вы сохраняете свои составные первичные ключи в списке, а затем используете QModelIndex.row () для ссылки на индекс списка вашего первичного ключа.

Примеры по запросу.Код не проверен.

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.....
...