0

我试图让我的用户选择一个日期并使用 dateedit 小部件进入数据库,并且我通过使用委托来执行此操作,但由于某种原因它也附加了时间

class ProductDelegate(QtSql.QSqlRelationalDelegate):
    def __init__(self):
        super().__init__()      

    def createEditor(self, parent, option, index):

        if index.column() == 3:
            editor = QtGui.QDateEdit(parent)
            now = QtCore.QDate.currentDate()
            editor.setMinimumDate(now)
            editor.setCalendarPopup(True)
            return editor
        else:
            return QtSql.QSqlRelationalDelegate.createEditor(self, parent, option, index)

选择日期后留下的字符串类似于 '30/01/2015 00:00:00' 我不想要时间吗?解决这个问题的方法是什么?

在此处输入图像描述

4

1 回答 1

2

设置编辑器和/或模型数据时,您可能没有正确格式化值。委托可能看起来像这样:

class ProductDelegate(QtSql.QSqlRelationalDelegate):
    def createEditor(self, parent, option, index):
        if index.column() == 3:
            editor = QtGui.QDateEdit(parent)
            now = QtCore.QDate.currentDate()
            editor.setDisplayFormat('yyyy-MM-dd')
            editor.setMinimumDate(now)
            editor.setCalendarPopup(True)
            return editor
        return super(ProductDelegate, self).createEditor(parent, option, index)

    def setEditorData(self, editor, index):
        if index.column() == 3:
            data = index.data()
            if not isinstance(data, QtCore.QPyNullVariant):
                 editor.setDate(QtCore.QDate.fromString(data))
        else:
            super(ProductDelegate, self).setEditorData(editor, index)

    def setModelData(self, editor, model, index):
        if index.column() == 3:
            value = editor.date().toString('yyyy-MM-dd')
            model.setData(index, value, QtCore.Qt.EditRole)
        else:
            super(ProductDelegate, self).setModelData(editor, model, index)
于 2015-01-17T20:49:49.430 回答