我正在使用QTableView通過模型顯示數據庫表。其中一個表格列有一個時間戳,實際上QDateTime存儲在那裏。由QTableView顯示的格式日期/時間值
有什麼方法可以在演示時格式化時間戳值?我在考慮類似於QDateTime("yyyy-MM-dd hh:mm:ss.zzz")
的.toString。
我正在使用QTableView通過模型顯示數據庫表。其中一個表格列有一個時間戳,實際上QDateTime存儲在那裏。由QTableView顯示的格式日期/時間值
有什麼方法可以在演示時格式化時間戳值?我在考慮類似於QDateTime("yyyy-MM-dd hh:mm:ss.zzz")
的.toString。
它可能返回你在QAbstractItemModel
this虛方法希望日期格式:
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您使用哪種模式
有函數,它返回你想要的日期格式。
根據您所需的格式,您可以在下面的鏈接中使用「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);
}
}
? –
http://doc.qt.io/qt-5/qsqltablemodel.html – KcFnMi