#ifndef DATEDELEGATE_H
#define DATEDELEGATE_H
#include <QStyledItemDelegate>
class DateDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
DateDelegate
(QObject *parent
= 0,
const int &dateColumn
=0);
void updateEditorGeometry
(QWidget *editor,
signals:
public slots:
private:
int dtC;
};
#endif // DATEDELEGATE_H
#ifndef DATEDELEGATE_H
#define DATEDELEGATE_H
#include <QStyledItemDelegate>
class QStyleOptionViewItem;
class DateDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
DateDelegate(QObject *parent = 0,const int &dateColumn=0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
signals:
public slots:
private:
int dtC;
};
#endif // DATEDELEGATE_H
To copy to clipboard, switch view to plain text mode
#include "datedelegate.h"
#include <QStyleOptionViewItem>
#include <QModelIndex>
#include <QDateEdit>
#include <QPainter>
#include <QApplication>
#include <QTableView>
#include <QDebug>
DateDelegate
::DateDelegate(QObject *parent,
const int &dateColumn
) : QStyledItemDelegate(parent),dtC (dateColumn)
{
}
{
if(index.isValid() && index.column() == dtC)
{
return editor;
}
else
return QStyledItemDelegate::createEditor(parent, option, index);
}
void DateDelegate
::setEditorData(QWidget *editor,
{
if(index.isValid() && index.column() == dtC)
{
QDate value
= index.
model()->data
(index, Qt
::EditRole).
toDate();
QDateEdit *dateEdit
= static_cast<QDateEdit
*>
(editor
);
dateEdit->setCalendarPopup(true);
dateEdit->setDate(value);
}
else
QStyledItemDelegate::setEditorData(editor,index);
}
{
if(index.isValid() && index.column() == dtC)
{
QDateEdit *dateEdit
= static_cast<QDateEdit
*>
(editor
);
QDate value
= dateEdit
->date
();
model->setData(index, value.toString("yyyy-MM-dd"), Qt::EditRole);
}
else
{
QStyledItemDelegate::setModelData(editor,model,index);
}
}
{
if(index.isValid() && index.column() == dtC)
editor->setGeometry(option.rect);
else
QStyledItemDelegate::updateEditorGeometry(editor, option, index);
}
{
painter->save();
if(index.isValid() && index.column() == dtC)
{
QDate value
= index.
model()->data
(index, Qt
::EditRole).
toDate();
if (option.
state & QStyle::State_Active) {
QApplication::style()->drawItemText
(painter, option.
rect, Qt
::AlignHCenter|Qt
::AlignVCenter,
option.palette, true, value.toString("dd/MM/yyyy"),
(option.
state&QStyle
::State_Selected)?
QPalette::HighlightedText:QPalette::WindowText);
}
else
{
QApplication::style()->drawItemText
(painter, option.
rect, Qt
::AlignHCenter|Qt
::AlignVCenter,
option.palette, true, value.toString("dd/MM/yyyy"),
}
}
else
{
QStyledItemDelegate::paint(painter, option, index);
}
painter->restore();
}
#include "datedelegate.h"
#include <QStyleOptionViewItem>
#include <QModelIndex>
#include <QDateEdit>
#include <QPainter>
#include <QApplication>
#include <QTableView>
#include <QDebug>
DateDelegate::DateDelegate(QObject *parent, const int &dateColumn) :
QStyledItemDelegate(parent),dtC (dateColumn)
{
}
QWidget *DateDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if(index.isValid() && index.column() == dtC)
{
QWidget *editor = new QDateEdit(QDate::currentDate(), parent);
return editor;
}
else
return QStyledItemDelegate::createEditor(parent, option, index);
}
void DateDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
if(index.isValid() && index.column() == dtC)
{
QDate value = index.model()->data(index, Qt::EditRole).toDate();
QDateEdit *dateEdit = static_cast<QDateEdit*>(editor);
dateEdit->setCalendarPopup(true);
dateEdit->setDate(value);
}
else
QStyledItemDelegate::setEditorData(editor,index);
}
void DateDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
if(index.isValid() && index.column() == dtC)
{
QDateEdit *dateEdit = static_cast<QDateEdit*>(editor);
QDate value = dateEdit->date();
model->setData(index, value.toString("yyyy-MM-dd"), Qt::EditRole);
}
else
{
QStyledItemDelegate::setModelData(editor,model,index);
}
}
void DateDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if(index.isValid() && index.column() == dtC)
editor->setGeometry(option.rect);
else
QStyledItemDelegate::updateEditorGeometry(editor, option, index);
}
void DateDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
painter->save();
if(index.isValid() && index.column() == dtC)
{
QDate value = index.model()->data(index, Qt::EditRole).toDate();
if (option.state & QStyle::State_Active)
{
QApplication::style()->drawItemText(painter, option.rect, Qt::AlignHCenter|Qt::AlignVCenter,
option.palette, true, value.toString("dd/MM/yyyy"),
(option.state&QStyle::State_Selected)?QPalette::HighlightedText:QPalette::WindowText);
}
else
{
QApplication::style()->drawItemText(painter, option.rect, Qt::AlignHCenter|Qt::AlignVCenter,
option.palette, true, value.toString("dd/MM/yyyy"),
QPalette::WindowText);
}
}
else
{
QStyledItemDelegate::paint(painter, option, index);
}
painter->restore();
}
To copy to clipboard, switch view to plain text mode
#include <QtCore/QCoreApplication>
#include <QLocale>
#include <QDebug>
#include <QVariant>
#include <QDate>
{
#include <QSystemLocale>
public:
MyLocal() { };
{
{
QDate inDate
=in.
toDate();
return inDate.toString("yy-M-d");
}
{
QDate inDate
=in.
toDate();
return inDate.toString("yyyy-MM-dd");
}
}
};
int main(int argc, char *argv[])
{
MyLocal m;
qDebug()<<QDate::currentDate().toString(Qt::DefaultLocaleShortDate);
qDebug()<<QDate::currentDate().toString(Qt::DefaultLocaleLongDate);
return a.exec();
}
#include <QtCore/QCoreApplication>
#include <QLocale>
#include <QDebug>
#include <QVariant>
#include <QDate>
class MyLocal : QSystemLocale
{
#include <QSystemLocale>
public:
MyLocal() { };
QVariant query(QueryType type, QVariant in) const
{
if (type==QSystemLocale::DateToStringShort)
{
QDate inDate=in.toDate();
return inDate.toString("yy-M-d");
}
else if (type==QSystemLocale::DateToStringLong)
{
QDate inDate=in.toDate();
return inDate.toString("yyyy-MM-dd");
}
return QSystemLocale::query(type, in);
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyLocal m;
qDebug()<<QDate::currentDate().toString(Qt::DefaultLocaleShortDate);
qDebug()<<QDate::currentDate().toString(Qt::DefaultLocaleLongDate);
return a.exec();
}
To copy to clipboard, switch view to plain text mode
Bookmarks