2010-01-06 35 views
6

Tôi có QTableView được kết nối với QSqlTableModel.
Trong cột đầu tiên, chỉ có ngày ở định dạng này: 2010-01-02
Tôi muốn cột này để hiển thị ngày ở định dạng này (nhưng không làm thay đổi các dữ liệu thực tế): 02.01.2010
tôi biết rằng tôi phải tạo một QItemDelegate cho cột này, nhưng tôi không biết làm thế nào tôi có thể đọc dữ liệu hiện có và ghi đè lên nó với một cái gì đó khác nhau. Bạn có bất kỳ ý tưởng làm thế nào để quản lý điều đó?Hiển thị dữ liệu khác trong QTableView với QItemDelegate

Trả lời

4

Một đại biểu mục không nhất thiết phải thay đổi dữ liệu, nó chỉ hiển thị dữ liệu. Ngoài ra, nếu bạn đang sử dụng Qt 4.4 hoặc mới hơn, hãy xem QStyledItemDelegate thay thế - đó là chủ đề nhận thức và trông đẹp hơn.

Có ví dụ về đại biểu của mục trong this article (có vẻ như là bản sao của tài liệu chính thức hiện đã hết hoặc không hoạt động).

Vì tất cả những gì bạn thực sự muốn làm là tùy chỉnh văn bản, thay vào đó bạn đã cân nhắc sử dụng mô hình proxy và chỉ trả về QString tùy chỉnh cho DisplayRole của cột ngày?

+0

Hoặc các đại biểu hoặc các mô hình ủy quyền sẽ làm việc khá tốt trong tình huống này. Các đại biểu có lẽ là gần gũi hơn với những gì dự định, tuy nhiên. –

+0

vấn đề của tôi là, rằng tôi không nhận được làm thế nào để làm cho nó với một QItemDelegate. phương thức paint() - sẽ không hoạt động với tôi – Berschi

+0

Điều gì đặc biệt là vấn đề với sơn()? – ChrisV

14

Giải pháp đơn giản nhất là để tạo ra một lớp con QStyledItemDelegate và reimplement displayText(...) tức

class DateFormatDelegate : public QStyledItemDelegate 
{ 
public: 
DateFormatDelegate (QString dateFormat, QObject *parent = 0) : 
    QStyledItemDelegate(parent), 
    m_dateFormat(dateFormat) 
{ 
} 

virtual QString displayText(const QVariant & value, const QLocale & locale) const 
{ 
    Q_UNUSED(locale); 
    return value.toDate().toString(m_dateFormat); 
} 

private: 
QString m_dateFormat; 
}; 

Sau đó, theo quan điểm của bạn -

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this)); 
Các vấn đề liên quan