我们会经常做一些表格显示信息,其中经常有日期时间信息。
当使用Qt的Model/View时,如果你用view自带的delegate,显示的时间可能不能符合要求。
这就需要我们编写新的delegate类。以下是一个专门用于显示日期时间的delegate类“TimeEditDelegate”,取自Qt Wiki,我做了改动。
.h文件
-
#ifndefTIMEEDITDELEGATE_H
-
#defineTIMEEDITDELEGATE_H
-
#include<QItemDelegate>
-
class
TimeEditDelegate:
public
QItemDelegate
-
{
-
Q_OBJECT
-
public
:
-
TimeEditDelegate(const
QStringtimeFormat=
"dd.MM.yyyyhh:mm:ss"
,QObject*parent=0):QItemDelegate(parent)
-
{this
->timeformat=timeFormat;};
-
void
paint(QPainter*painter,
const
QStyleOptionViewItem&option,
-
const
QModelIndex&index)
const
;
-
private
:
-
QStringtimeformat;
-
};
-
#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
-
{
-
QDateTimedtval=index.model()->data(index,Qt::DisplayRole).toDateTime();
-
QStringindexvalue=tr("Datenotset"
);
-
if
(dtval.isValid())
-
{
-
indexvalue=dtval.toString(timeformat);
-
}
-
Q_ASSERT(index.isValid());
-
QStyleOptionViewItemV3opt=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;
-
-
painter->save();
-
painter->setClipRect(opt.rect);
-
-
QVariantvalue;
-
QPixmappixmap;
-
QRectdecorationRect;
-
value=index.data(Qt::DecorationRole);
-
QStringtext;
-
QRectdisplayRect;
-
value=index.data(Qt::DisplayRole);
-
if
(value.isValid()){
-
text=indexvalue;
-
displayRect=textRectangle(painter,option.rect,opt.font,text);
-
}
-
QRectcheckRect;
-
Qt::CheckStatecheckState=Qt::Unchecked;
-
value=index.data(Qt::CheckStateRole);
-
if
(value.isValid()){
-
checkState=static_cast
<Qt::CheckState>(value.toInt());
-
checkRect=check(opt,opt.rect,value);
-
}
-
-
doLayout(opt,&checkRect,&decorationRect,&displayRect,false
);
-
-
drawBackground(painter,opt,index);
-
drawCheck(painter,opt,checkRect,checkState);
-
drawDecoration(painter,opt,decorationRect,pixmap);
-
drawDisplay(painter,opt,displayRect,text);
-
drawFocus(painter,opt,displayRect);
-
-
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用法示例总结,代码简单明了,可参考使用 。
通过动态代理,在单元格中添加spinbox,checkbox,combobox。
qt实现了QTableView中添加复选框(包括表头复选框),分页,查询功能,创建数据库(mysql)的sql文件也包含
qt qtableview在表头中添加combobox,checkbox,spinbox
QTableView 标题换行显示和富文本显示 ,多种代理,可以解决一些问题,有点贵,慎下载
原文为《Qt中将QTableView中的数据导出为Excel文件>>,地址http://blog.csdn.net/superjoel/article/details/5321404。代码为QT4,QT5有些问题,因为只是参考里面的代码,就不是很在意。
函数,仅显示单个区域,进行grabWidget并drawPixmap到painter上,再调用printer->newPage();新建一页,再仅显示下一个小块,在新的一页上打印下一个小块!借鉴了...
http://www.cnblogs.com/li-peng/p/4029885.html的源码,QT在QTableView的一列里添加两个按钮
原文为《Qt中将QTableView中的数据导出为Excel文件>>,地址http://blog.csdn.net/superjoel/article/details/5321404,资源比较难下载,我下载好帮作者上传下。实例可用,简单易懂,对于QTableView导出为excel...
基于QT中的QTableView实现表格翻页标签(精准定位、表格可拖动大小、可与滑动条联动)
QTableView显示自定义CheckBox, 开发环境macos 10.13.1 Qt 5.9.1
博客地址:https://blog.csdn.net/sinat_33859977/article/details/102776651
实现表头和表第一列插入checkbox复选框,运用QT委托重绘表头和表第一列
qt model和QtableView的使用
实例QT程序 —— QTableView 表格行的上下移动 编译可以直接运行。 运行环境WIN10 Qt5.9.7 。 资源为源码压缩包: TableViewMoveRow.rar 相关文章链接如下: ...
原文为《Qt中将QTableView中的数据导出为Excel文件>>,地址http://blog.csdn.net/superjoel/article/details/5321404。经过修改,支持QT的编译和运行。
主要介绍了Qt GUI图形图像开发之QT表格控件QTableView详细使用方法与实例,需要的朋友可以参考下
方法一:恰当的设置表格的列宽往往能给表格的美观性带来较好的效果。一种简单的方法是:调用表头的setSectionResizeMode()方法,代码如下:参数QH
平台:QT5.12.9 + Windows + mingw32(可直接编译,默认是桌面路径) 实现QFileSystemModel+QTableView创建文件管理系统,基于windows平台。 进一步优化该功能,为了适配嵌入式arm平台,实现QFileSystemModel的...