2011-04-30 88 views
2

我正在使用sqlmodel在qtableview中显示来自sql server的一些信息。PyQt Paint自定义日期格式

我已经设置了一个自定义委托来处理数据的编辑。

我想在一个特定的格式来显示我的日期,当他们表第一次加载日期显示为这样: 20011-04-30 但是,当我修改的日期和点击关闭单元的接受日期则显示像: 30/04/2011 这是如何将其存储在数据库中,我希望如何显示它开始,我不知道为什么它编辑后更改格式。

我猜我必须重新实现该列的paint方法我已经做了一些类似的进度条,但我不知道如何去做文本。

这是我的代表,因为它代表着,注意是有一些编辑器设置为其他列,但我的主要问题只涉及如何正确显示日期。

import sys 
import os 

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtSql import * 

PROJECTID, PROJECTTITLE, CLIENTID, DEADLINE, PROGRESS, ROOT = range(6) 

class projectsDelegate(QSqlRelationalDelegate): 
    def __ini__(self, parent = None): 
    super(projectsDelegate, self).__init__(parent) 

def createEditor(self, parent, option, index): 
    if index.column() == DEADLINE: 
     editor = QDateEdit(parent) 
     #editor.setDisplayFormat("yyyy/MM/dd") 
     editor.setMinimumDate(QDate.currentDate()) 
     editor.setCalendarPopup(True) 
     return editor 
    elif index.column() == PROGRESS: 
     editor = QSpinBox(parent) 
     editor.setRange(0, 100) 
     editor.setSingleStep(5) 
     editor.setSuffix("%") 
     return editor 
    elif index.column() == ROOT: 
     editor = QFileDialog(parent) 
     editor.setFileMode(QFileDialog.Directory) 
     editor.setOptions(QFileDialog.ShowDirsOnly) 
     editor.setFixedSize(400, 400) 
     editor.setWindowTitle("Select A Root Folder For The Project") 
     return editor 
    else: 
     return QSqlRelationalDelegate.createEditor(self, parent, option, index) 

def setEditorData(self, editor, index): 
    if index.column() == DEADLINE: 
     text = index.model().data(index, Qt.DisplayRole).toDate() 
     editor.setDate(text) 
    elif index.column() == PROGRESS: 
     prog = index.model().data(index, Qt.DisplayRole).toInt()[0] 
     editor.setValue(prog) 
    elif index.column() == ROOT: 
     root = index.model().data(index, Qt.DisplayRole).toString() 
     editor.setDirectory(os.path.dirname(str(root))) 
     screen = QDesktopWidget().screenGeometry() 
     size = editor.geometry() 
     editor.move((screen.width() - size.width())/2, (screen.height() - size.height())/2) 
    else: 
     QSqlRelationalDelegate.setEditorData(self, editor, index) 

def setModelData(self, editor, model, index): 
    if index.column() == DEADLINE: 
     model.setData(index, QVariant(editor.date())) 
    elif index.column() == PROGRESS: 
     model.setData(index, QVariant(editor.value())) 
    elif index.column() == ROOT: 
     model.setData(index, QVariant(editor.directory().absolutePath())) 
    else: 
     QSqlRelationalDelegate.setModelData(self, editor, model, index) 

def paint(self, painter, option, index): 
    if index.column() == PROGRESS: 
     bar = QStyleOptionProgressBarV2() 
     bar.rect = option.rect 
     bar.minimum = 0 
     bar.maximum = 100 
     bar.textVisible = True 
     percent = index.model().data(index, Qt.DisplayRole).toInt()[0] 
     bar.progress = percent 
     bar.text = QString("%d%%" % percent) 
     QApplication.style().drawControl(QStyle.CE_ProgressBar, bar, painter) 
    else: 
     QSqlRelationalDelegate.paint(self, painter, option, index) 

def sizeHint(self, options, index): 
    if index.column() == PROGRESS: 
     return QSize(150, 30) 
    elif index.column() == ROOT: 
     return QSize(400, 800) 
    else: 
     return QSqlRelationalDelegate.sizeHint(self, options, index) 

谢谢,汤姆。

回答

1

为什么editor.setDisplayFormat(“yyyy/MM/dd”)被注释掉了?不应该照顾格式?

+0

这就是为什么我在第一个地方添加它我认为这可以解决它,但它似乎没有区别,它在内或外,或设置为不同的格式,我仍然结束了相同的结果。 – supertom44 2011-04-30 15:51:03