Qt QTableView显示日期时间格式
2010-01-15 11:55
816 查看
我们会经常做一些表格显示信息,其中经常有日期时间信息。
当使用Qt的Model/View时,如果你用view自带的delegate,显示的时间可能不能符合要求。
这就需要我们编写新的delegate类。以下是一个专门用于显示日期时间的delegate类“TimeEditDelegate”,取自Qt Wiki,我做了改动。
.h文件
.cpp文件
使用方法
其中,c是需要显示日期时间的列号。"yyyy-dd-MM"是显示的格式。两个中文常用格式为:
yyyy-dd-MM 例子:2009-12-25
yyyy-dd-MM hh:mm:ss 例子:2009-12-25 12:25:32
当使用Qt的Model/View时,如果你用view自带的delegate,显示的时间可能不能符合要求。
这就需要我们编写新的delegate类。以下是一个专门用于显示日期时间的delegate类“TimeEditDelegate”,取自Qt Wiki,我做了改动。
.h文件
#ifndef TIMEEDITDELEGATE_H #define TIMEEDITDELEGATE_H #include <QItemDelegate> class TimeEditDelegate : public QItemDelegate { Q_OBJECT public: TimeEditDelegate(const QString timeFormat = "dd.MM.yyyy hh:mm:ss",QObject *parent = 0) : QItemDelegate(parent) {this->timeformat = timeFormat;}; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; private: QString timeformat; }; #endif // TIMEEDITDELEGATE_H
.cpp文件
#include "timeeditdelegate.h" #include <QModelIndex> #include <QPainter> #include <QDateTime> #include <QStyleOptionViewItemV3> #include <QStyleOptionViewItemV2> void TimeEditDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QDateTime dtval = index.model()->data(index, Qt::DisplayRole).toDateTime(); QString indexvalue = tr("Date not set"); if(dtval.isValid()) { indexvalue = dtval.toString(timeformat); } Q_ASSERT(index.isValid()); QStyleOptionViewItemV3 opt = setOptions(index, option); const QStyleOptionViewItemV2 *v2 = qstyleoption_cast<const QStyleOptionViewItemV2 *>(&option); opt.features = v2 ? v2->features : QStyleOptionViewItemV2::ViewItemFeatures(QStyleOptionViewItemV2::None); const QStyleOptionViewItemV3 *v3 = qstyleoption_cast<const QStyleOptionViewItemV3 *>(&option); opt.locale = v3 ? v3->locale : QLocale(); opt.widget = v3 ? v3->widget : 0; // prepare painter->save(); painter->setClipRect(opt.rect); // get the data and the rectangles QVariant value; QPixmap pixmap; QRect decorationRect; value = index.data(Qt::DecorationRole); QString text; QRect displayRect; value = index.data(Qt::DisplayRole); if (value.isValid()) { text = indexvalue; displayRect = textRectangle(painter, option.rect, opt.font, text); } QRect checkRect; Qt::CheckState checkState = Qt::Unchecked; value = index.data(Qt::CheckStateRole); if (value.isValid()) { checkState = static_cast<Qt::CheckState>(value.toInt()); checkRect = check(opt, opt.rect, value); } // do the layout doLayout(opt, &checkRect, &decorationRect, &displayRect, false); // draw the item drawBackground(painter, opt, index); drawCheck(painter, opt, checkRect, checkState); drawDecoration(painter, opt, decorationRect, pixmap); drawDisplay(painter, opt, displayRect, text); drawFocus(painter, opt, displayRect); // done painter->restore(); }
使用方法
View->setItemDelegateForColumn(c, new TimeEditDelegate("yyyy-dd-MM"));
其中,c是需要显示日期时间的列号。"yyyy-dd-MM"是显示的格式。两个中文常用格式为:
yyyy-dd-MM 例子:2009-12-25
yyyy-dd-MM hh:mm:ss 例子:2009-12-25 12:25:32
相关文章推荐
- Qt QTableView显示日期时间格式
- QTableView设置显示的日期时间格式
- 自定义 RMAN 显示的日期时间格式
- mysql中调整时间日期显示格式
- [原创]两行代码解决javascript按指定格式显示日期时间
- oracle将unix时间戳格式转成日期格式显示
- jsp页面时间戳显示为日期格式
- asp.net 2.0GRID VIEW显示日期格式设置
- 修改windows server 2008 时间和日期格式 IIS配置后显示错误
- 修改sqlplus中显示时间日期的格式
- JS获取当前时间 格式 年月日 礼拜几 显示阴历日期 节气
- 在jqueryEasyUI界面将时间以日期加时分秒的格式显示
- MATLAB——时间,日期及显示格式
- android 日期时间格式转换;软键盘显示消失;获取系统title
- 汇编语言:以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
- GridView中显示时间日期格式问题
- GridView中显示时间日期格式问题
- 修改windows server 2008 时间和日期格式 IIS配置后显示错误
- 浅析GridView中显示时间日期格式的问题
- 访问CMOS RAM 【 以"年/月/日 时:分:秒" 的格式,显示当前的日期、时间】