我在QTableview上使用QDateTimeEdit作为委托来显示开始日期和结束日期。 当我试图填充从数据库接收的数据时,QDateTimeEdit委托不显示它。在
这是我的代码:
类DateDelegate
:
class DateDelegate(QtGui.QItemDelegate):
def __init__(self, parent):
QtGui.QItemDelegate.__init__(self, parent)
def createEditor(self, parent, option, index):
self.dateEdit = QtGui.QDateTimeEdit(parent)
self.dateEdit.setCalendarPopup(True)
self.dateEdit.setMinimumDate(QtCore.QDate(2014, 03, 01))
self.dateEdit.setDisplayFormat(_translate("Form", "dd/mm/yyyy", None))
return self.dateEdit
def setModelData(self, editor, model, index):
value = self.dateEdit.dateTime().toPyDateTime()
strDate = value.strftime('%d/%m/%Y')
model.setData(index, strDate, QtCore.Qt.EditRole)
类AssetTableModel
:
类AssetWidget
:
class AssetWidget(QtGui.QDialog):
def __init__(self, parent = None):
super(AssetWidget, self).__init__(parent)
uic.loadUi(uipath+'/AssetTable.ui', self)
# DB call here
self.loadAssetData()
# db call ends here
self.model = None
self.fillCombo(self.assetType)
self.cellDelegate = CellDelegate(self)
for i in range(10):
self.assetTV.setItemDelegateForColumn(i, self.cellDelegate)
self.sDateDelegate = DateDelegate(self)
self.assetTV.setItemDelegateForColumn(10, self.sDateDelegate )
self.assetTV.setItemDelegateForColumn(11, self.sDateDelegate)
self.connect(self.assettypeCB, QtCore.SIGNAL("currentIndexChanged(int)"), self.loadAssets )
self.connect(self.closeBTN , QtCore.SIGNAL("clicked()"), self.close )
self.connect(self.addRowBTN, QtCore.SIGNAL("clicked()"), self.addRow )
self.connect(self.assetTV, QtCore.SIGNAL("doubleClicked(QModelIndex)"), self.tableEdited )
self.show()
我认为您在ItemDelegate中缺少了
setEditorData()
方法。在根据您所附的源代码,我假设您将日期存储为字符串?在我看来,最好使用QDateTime对象来存储日期/时间。如果这样做,就不需要ItemDelegate来提供适当的编辑器,因为Qt知道它需要为这种数据类型提供哪个编辑器。(见Qt Documentation - Standard Editing Widgets。在
但是,如果仍然希望将日期存储为字符串,请参阅下面的示例程序,了解如何使用delegtes。在
相关问题 更多 >
编程相关推荐