【问题标题】:format date/time value shown by a QTableView格式化 QTableView 显示的日期/时间值
【发布时间】:2017-03-22 12:55:12
【问题描述】:

我正在使用QTableView 通过模型显示数据库表。其中一个表列有一个时间戳,实际上之前存储了一个 QDateTime。

有没有办法在演示时格式化时间戳值?我在想QDateTime("yyyy-MM-dd hh:mm:ss.zzz") 的 .toString 之类的东西。

【问题讨论】:

标签: c++ qt c++11 qt5 c++14


【解决方案1】:

可以在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

【讨论】:

  • 如果其他东西挂在模型上,这将无法正常工作,这需要实际的QDateTimes...
【解决方案2】:

有一个函数,可以返回你想要的日期格式。

您可以根据您所需的格式,使用以下链接中的“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);
    }
}

【讨论】:

  • 你能告诉我更多关于这部分的信息吗 - 将 QString 附加到表格单元格?
  • 用一些非常粗略的代码更新了答案。如果至少给你一些想法,我很高兴。未测试。在记事本中输入。如有语法错误,请见谅。
猜你喜欢
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多