2016-11-08 450 views
0

我正在使用QTableView通過模型顯示數據庫表。其中一個表格列有一個時間戳,實際上QDateTime存儲在那裏。由QTableView顯示的格式日期/時間值

有什麼方法可以在演示時格式化時間戳值?我在考慮類似於QDateTime("yyyy-MM-dd hh:mm:ss.zzz")的.toString。

+0

? –

+0

http://doc.qt.io/qt-5/qsqltablemodel.html – KcFnMi

回答

1

它可能返回你在QAbstractItemModelthis虛方法希望日期格式:

QVariant QAbstractItemModel::data(const QModelIndex &item, int role = Qt::DisplayRole) const; 

你必須從子類QSqlTableModel的自己的模型,並重寫此方法。代碼請參考以下內容:

QVariant MySubclassedMode::data(const QModelIndex& item, int role = Qt::DisplayRole) const{ 

    if(role == Qt::DisplayRole && itemBelongsTodateTimeColumn(item)){ 

     QDateTime* dateTime = retrieveDateTimeObjectForModelIndex(item); 
     return QVariant(dateTime.toString("d MMM YYYY, h:mm")); 
    } 

    return QSqlTableModel::data(item, role) 
} 

此方法將允許您輕鬆更改對象在表格視圖中的顯示方式。

QDateTime格式細節here您使用哪種模式

0

有函數,它返回你想要的日期格式。

根據您所需的格式,您可以在下面的鏈接中使用「Qt :: DateFormat」不同的標誌作爲「tostring」的輸入。

http://doc.qt.io/qt-5/qt.html#DateFormat-enum

的功能是:

QString QDateTime::toString(Qt::DateFormat format = Qt::TextDate) 

http://doc.qt.io/qt-5/qdatetime.html#toString-1

追加的QString時,表格單元格。

如果你想只有時間:

你有 「時間()」 中的 「QDateTime」 可用的功能

QTime time() const

有 」的toString「 爲 」QTIME「 太和你可以自定義的時候,你要

QString QTime::toString(const QString &format) const 

http://doc.qt.io/qt-5/qtime.html#toString

在添加到tableview之前在模型中更新Datetime: 這是我瘋狂的猜測(代碼是僞的。而沒有測試,不工作)

您可以處理與信號這種情況「datachanged」

http://doc.qt.io/qt-5/qabstractitemmodel.html#dataChanged

首先連接信號並定義一個槽來處理它在你的類。

要連接datachanged信號下面是原型:

connect(ui->tableView->yourMODEL(),SIGNAL(dataChanged(QModelIndex,QModelIndex)),SLOT(UpdateData(QModelIndex,QModelIndex))); 

,並定義 「的UpdateData()」 在自己的窗口。

void YourWIndow::UpdateData(const QModelIndex & indexA, const QModelIndex & indexB) 
{ 
    int columnValue = indexA.column(); 
    int rowValue = indexA.row(); 

    if("your Column value is QDATETIME column") 
    { 
     QSqlRecord record = ui->tableView->model()->record(rowValue); 
     QVariant var = record (datefieldcolumn); 
     QDateTime dTime = var.toDateTime(); 


     //Format it in your way. 

     //Update your QSqlRecord. 
     record.setValue(datefieldcolumn,QVariant(formatedDateTime)); 

     ui->tableView->model()->setRecord(rowValue,record); 
    } 
} 
+0

你能否告訴我更多關於這部分的內容 - 將QString追加到表格單元格? – KcFnMi

+0

用一些非常粗糙的代碼更新了答案。如果至少給你一些想法,我很高興。未經測試。在記事本中輸入。如果語法錯誤,請原諒。 – Naidu