[PyQt] QDateEdit, QStandardItemModel and empty date fields
Sibylle Koczian
nulla.epistola at web.de
Tue Mar 5 15:30:31 GMT 2019
Many thanks to you both for your solutions. I'll need a little time to
try them out - and this looks like the first time I might put an
additional widget into the designer. That is documented, I think, but
I'll have to look at it.
Am 05.03.2019 um 09:43 schrieb J Barchan:
>
> On Sun, 3 Mar 2019 at 15:57, Maurizio Berti <maurizio.berti at gmail.com
> <mailto:maurizio.berti at gmail.com>> wrote:
>
> QDateTimeEdit and its inherited QDateEdit/QTimeEdit all inherit from
> QAbstractSpinBox, which contains a "private" QLineEdit.
> While that is not publicly accessible, you can just use findChild()
> to get its reference.
> Here's a small example you can implement in a model view by using a
> delegate and checking for the data in the setEditorData() method:
>
> class ClearableDateEdit(QtWidgets.QDateEdit):
> def __init__(self, *args, **kwargs):
> QtWidgets.QDateEdit.__init__(self, *args, **kwargs)
> self.lineEdit = self.findChild(QtWidgets.QLineEdit)
> self.clear()
>
> def clear(self):
> self.lineEdit.setText('')
>
>
> class Widget(QtWidgets.QWidget):
> def __init__(self):
> QtWidgets.QWidget.__init__(self)
> layout = QtWidgets.QGridLayout()
> self.setLayout(layout)
> dateEdit = ClearableDateEdit()
> layout.addWidget(dateEdit)
> clearButton = QtWidgets.QPushButton('Clear date')
> layout.addWidget(clearButton)
> clearButton.clicked.connect(dateEdit.clear)
>
> There are some things you've to take into account, anyway, most
> importantly whenever the focus is get or lost or the cell is
> changed, which will require some control over the DateEdit widget
> *changed() signals and methods like dateTimeFromText(), and finally
> check everything before using setModelData.
>
> Maurizio
>
>
> You cannot have an empty QDateEdit, as per my topic long ago at
> https://forum.qt.io/topic/86749/qdateedit-qabstractspinbox-blank-empty-value-problem.
Or rather, you cannot have an empty QDate, as this very interesting
discussion shows. Happily I'm not plagued with pernickety users, but
just writing something I intend to use myself. So possibly I'll just use
a QLineEdit with an input mask.
>
> I had to deal with this. I did not take @Maurizio's approach. I do not
> know what his solution does about QDateEdit.setData/data() for an empty
> date, and other things. Until now I didn't know you could get at its
> QLineEdit. For my part I chose to have a QLineEdit plus an associated
> ... button to its right which leads to a modal dialog. I paste extracts
> below, feel free to cannibalise it if you want my approach. If @Maurizio
> wishes to criticize mine, that's fine, I will read and consider!
>
I think in Maurizios approach much depends on the delegate that's used.
Greetings,
Sibylle
More information about the PyQt
mailing list