我使用QTableView通过模型显示数据库表。其中一个表列有一个时间戳,实际上之前存储了一个QDateTime。
有没有办法在演示时格式化时间戳值?我在考虑类似QDateTime("yyyy-MM-dd hh:mm:ss.zzz")
的.toString。
答案 0 :(得分:1)
可以在QAbstractItemModel
的{{3}}虚拟方法中按照您的意愿返回日期格式:
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格式详细信息为this
答案 1 :(得分: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”中有“time()”功能
QTime time() const
“
“QTime”也有“tostring”,您可以自定义所需的时间
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);
}
}