TableView、TreeView或ListView中使用的QDateTime显示格式可以通过修改ItemDelegate来修改。
在此方法中,我们派生 StyledItemDelegate 以覆盖 createEditor 和 displayText 方法,然后将新委托应用于所需的视图。
DateFormatDelegate.hpp:
#include <qstyleditemdelegate.h>
class DateFormatDelegate : public QStyledItemDelegate {
Q_OBJECT
public:
explicit DateFormatDelegate(QObject* parent = Q_NULLPTR)
:QStyledItemDelegate(parent) {}
QString displayText(const QVariant& value, const QLocale& locale) const Q_DECL_OVERRIDE;
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
};
DateFormatDelegate.cpp:
QString DateFormatDelegate::displayText(const QVariant& value, const QLocale& locale) const
{
switch (value.type()) {
case QVariant::DateTime:
return locale.toString(value.toDateTime(), "yyyy/MM/dd hh:mm:ss");
default:
return QStyledItemDelegate::displayText(value, locale);
}
}
QWidget *DateFormatDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QWidget* widget = QStyledItemDelegate::createEditor(parent, option,index);
if( strcmp(widget->metaObject()->className(),"QDateTimeEdit") == 0)
dynamic_cast<QDateTimeEdit*>(widget)->setDisplayFormat("yyyy/MM/dd hh:mm:ss");
return widget;
}
然后,您可以将新委托设置为您的视图:
ui->TableView_MyTable->setIteemDelegate(
new DateFormatDelegate(ui->TableView_MyTable)));
如果您已经派生了视图,它也可以直接在构造函数中应用。
此方法允许修改任何编辑器小部件的样式,而无需担心以后的修改或您的视图组织。
不过可能有更优雅的解决方案。