Devo mostrare dei dati in una tabella, ma prima di farlo ho bisogno di formattare alcuni campi, ad esempio le date che sono salvate nel DB in formato YYYY-MM-DD.
Cercando informazioni credo di aver capito che mi serve definire un delegato.
La classe che definisce il model è attualmente questa
Nella view mostro i dati della tabella in questo modocodice:class JobModel(): _tab_job = 'lavori' def __init__(self): super(JobModel, self).__init__() self.model = self._createModel(self._tab_job) @staticmethod def _createModel(table): """Create and set up the model.""" tableModel = QSqlRelationalTableModel() tableModel.setTable(table) tableModel.setEditStrategy(QSqlRelationalTableModel.OnFieldChange) tableModel.setRelation(1, QSqlRelation('clienti', 'id', 'nome')) tableModel.select() headers = ("ID", "Cliente", "Numero", "Nome", "Data Provino", "Data Conferma", "Data Incisione", "Data Consegna", "Note") for columnIndex, header in enumerate(headers): tableModel.setHeaderData(columnIndex, Qt.Horizontal, header) return tableModel
Il mio problema è che non capisco come implementare il delegato, ho provato in questo modocodice:self.ui.tbl_result.setModel(self.jobModel.model) self.ui.tbl_result.setSelectionBehavior(QAbstractItemView.SelectRows) self.ui.tbl_result.resizeColumnsToContents() # Il delegato per la quinta colonna (prima data) dovrebbe essere richiamato in questo modo self.ui.tbl_result.setItemDelegateForColumn( 4, JobDateDelegate(self.ui.tbl_result))
Le date vengono formattate, ma non penso sia il modo giusto di procedere, perché intanto le celle vengono renderizzate in modo diverso rispetto a quelle non interessate dal delegato.codice:class JobDateDelegate(QtWidgets.QStyledItemDelegate): def __init__(self, owner): super().__init__(owner) def paint(self, painter, option, index): if isinstance(self.parent(), QtWidgets.QAbstractItemView): self.parent().openPersistentEditor(index) super(JobDateDelegate, self).paint(painter, option, index) def createEditor(self, parent, option, index): # Qui non so che tipo di widget definire, nessuno sembra corrispondere alle celle della tabella editor = QtWidgets.QTextEdit(parent) # Qui (?) va definita la logica per formattare le date return editor def commit_editor(self): editor = self.sender() self.commitData.emit(editor) def setEditorData(self, editor, index): value = index.data(QtCore.Qt.DisplayRole) editor.setText(value) def setModelData(self, editor, model, index): value = index.data(QtCore.Qt.DisplayRole) model.setData(index, value, QtCore.Qt.DisplayRole) def updateEditorGeometry(self, editor, option, index): editor.setGeometry(option.rect)
Qual è il modo corretto di procedere?

Rispondi quotando