QSqlTableModel Войдите в режим редактирования после InsertRecord - PullRequest
0 голосов
/ 27 октября 2018

Понимая, что на этот вопрос был дан ответ ранее, использовалась модель QStandardItemModel.Применение этого решения с использованием QSqlTableModel не дало таких же результатов.Итак, вопрос: как я могу перевести QTableView в режим редактирования после того, как вставляю запись?Приведенный ниже код почти возвращает меня туда, но он будет редактировать первое поле, но последующая вкладка помещает его в следующее поле, но для записи, которая была ранее выбрана, поэтому я предполагаю, что пропускаю шаг:

class SclDataBrowse(QWidget):
    def __init__(self, parent=None):
        super(SclDataBrowse, self).__init__(parent)
        self.resize(336, 462)
        self.setup_ui()
        self.setup_db()
        self.setup_model()
        self.view.setModel(self.model)
        if self.db.isOpen():
            self.load_data()

    def setup_ui(self):
        self.layout = QVBoxLayout(self)
        self.view = QTableView(self)
        self.btn_New = QPushButton(self)
        self.btn_New.setMinimumSize(QSize(70, 21))
        self.btn_New.setMaximumSize(QSize(70, 21))
        self.btn_New.setText('New')
        self.layout.addWidget(self.view)
        self.layout.addWidget(self.btn_New)

    def setup_db(self):
        self.db = QSqlDatabase("QMYSQL")
        self.db.setHostName(myhost)
        self.db.setUserName(myuser)
        self.db.setPassword(mypassword)
        self.db.setDatabaseName(mydb)
        self.db.open()

    def setup_model(self):
        self.model = QSqlTableModel(self,self.db)
        self.model.setTable("scldata")
        self.model.setEditStrategy(QSqlTableModel.OnManualSubmit)
        self.model.setHeaderData(0, Qt.Horizontal, 'ID')
        self.model.setHeaderData(1, Qt.Horizontal, 'Foreign ID')
        self.model.setHeaderData(2, Qt.Horizontal, 'Receipts Start')
        self.model.setHeaderData(3, Qt.Horizontal, 'Receipts End')
        self.model.setHeaderData(4, Qt.Horizontal, 'Billing Rate')

    def load_data(self):
        rec = QSqlRecord()
        rec.append(QSqlField("recordid",QVariant.String))
        rec.append(QSqlField("svcdataid",QVariant.String))
        rec.setValue('recordid',str(uuid.uuid4()))
        rec.setValue('svcdataid', "ParentID")
        row = self.model.rowCount()
        self.model.insertRecord(row,rec)
        ndx = self.model.index(row, 2)
        self.view.edit(ndx)

1 Ответ

0 голосов
/ 27 октября 2018

Вы должны использовать тот же QSqlRecord, который предоставляет модель, кроме того, чтобы установить новый currentIndex в selectionModel:

from PyQt5 import QtCore, QtWidgets, QtSql
import uuid

myhost = ""
myuser = ""
mypassword = ""
mydb = ""

class SclDataBrowse(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(SclDataBrowse, self).__init__(parent)
        self.resize(336, 462)
        self.setup_ui()
        self.setup_db()
        self.setup_model()
        self.view.setModel(self.model)
        if self.db.isOpen():
            self.load_data()

    def setup_ui(self):
        self.view = QtWidgets.QTableView()
        self.btn_New = QtWidgets.QPushButton('New')
        self.btn_New.setFixedSize(70, 21)

        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.view)
        layout.addWidget(self.btn_New)

    def setup_db(self):
        self.db = QtSql.QSqlDatabase("QMYSQL")
        self.db.setHostName(myhost)
        self.db.setUserName(myuser)
        self.db.setPassword(mypassword)
        self.db.setDatabaseName(mydb)
        self.db.open()

    def setup_model(self):
        self.model = QtSql.QSqlTableModel(self,self.db)
        self.model.setTable("scldata")
        self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
        titles = ('ID', 'Foreign ID', 'Receipts Start', 'Receipts End', 'Billing Rate')
        for i, title in enumerate(titles):
            self.model.setHeaderData(i, QtCore.Qt.Horizontal, title)

    def load_data(self):
        self.model.select()
        rec = self.model.record()
        rec.setValue('recordid',str(uuid.uuid4()))
        rec.setValue('svcdataid', "ParentID")
        row = self.model.rowCount()
        self.model.insertRecord(row, rec)
        ndx = self.model.index(row, 2)
        self.view.edit(ndx)
        self.view.selectionModel().setCurrentIndex(ndx, QtCore.QItemSelectionModel.Select)

if __name__ == '__main__':
    import sys

    app = QtWidgets.QApplication(sys.argv)
    combo = SclDataBrowse()
    combo.showMaximized()    
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...