2011-07-09 14 views
1

我正在使用QSqlTableModel作爲數據源,並使用QTableView來顯示數據。 此外,我正在使用一個QDataWidgetMapper以單獨的形式編輯數據。Qt模型/視圖委託:如何簡單地翻譯文本數據?

我想要做的就是將日期/時間字符串從數據庫中的一種格式(2011-07-09T18:21:49)轉換爲不同的格式以顯示在表格中(18:21)和另一種格式編輯映射(09.07.2011 18:21:49)

我認爲ItemDelegate是正確的方式,但我不想改變繪畫等等......我如何以正確的方式做到這一點?

回答

2

好吧,我認爲這可能是做(中間數據模型), 正確的方式,但現在我使用的QItemDelegate。 我做了以下和它的工作:

class DateTimeDelegate : public QItemDelegate 
{ 
Q_OBJECT 
public: 
explicit DateTimeDelegate(QObject *parent = 0); 

void setEditorData(QWidget *editor, 
        const QModelIndex &index) const; 

void setModelData(QWidget *editor, 
        QAbstractItemModel *model, 
        const QModelIndex &index) const; 

void paint(QPainter *painter, const QStyleOptionViewItem &option, 
      const QModelIndex &index) const; 

signals: 

public slots: 

}; 

實現:

void DateTimeDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const 
{ 
    if(index.column() == 1 || index.column() == 2) { 
     if (editor->property("text").isValid()) { 
      QDateTime dt = QDateTime::fromString(index.data().toString(), Qt::ISODate); 
      editor->setProperty("text", dt.toString("dd.MM.yyyy hh:mm")); 
     } 
    } else { 
     QItemDelegate::setEditorData(editor, index); 
    } 
} 

void DateTimeDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, 
      const QModelIndex &index) const 
{ 
    QDateTime dt = QDateTime::fromString(index.data().toString(), Qt::ISODate); 


    QString time; 
    if(dt.date() == QDate::currentDate()) 
     time = dt.toString("hh:mm"); 
    else 
     time = dt.toString("dd.MM."); 

    painter->save(); 
    painter->setClipRect(option.rect); 

    drawBackground(painter, option, index); 
    drawDisplay(painter, option, option.rect, time); 
    drawFocus(painter, option, option.rect); 

    painter->restore(); 
} 
0

我認爲你必須使用代理的數據模型,不是ItemDelegate