首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QDateTimeEdit中设置QTreeView的显示格式和类似属性?

如何在QDateTimeEdit中设置QTreeView的显示格式和类似属性?
EN

Stack Overflow用户
提问于 2013-10-25 19:49:12
回答 1查看 2.2K关注 0票数 1

如何设置在displayFormat中使用的QDateTimeEdit对象的- say - QTreeView和calendarPopup属性?

(它们在编辑QVariant(QDateTime)值时使用。)

有可能为此目的使用Qt性质系统吗?

不幸的是,样式表参考没有列出QDateTimeEdit的这些属性。另一方面,文献提及认为:

在4.3及以上版本中,任何可设计的Q_PROPERTY都可以使用qproperty-语法进行设置。

因此,我尝试过这样的方法:

代码语言:javascript
复制
QApplication app(argc, argv);
// first try
// app.setStyleSheet(
//  " QDateTimeEdit { displayFormat: \"yyyy-MM-dd hh:mm:ss\" ; }");
app.setStyleSheet(
  " QDateTimeEdit { qproperty-displayFormat: \"yyyy-MM-dd hh:mm:ss\" ; }");

不过,这两种样式表都没有被捡起来。

设置这些属性的正确样式表语法是什么?

还是有另一种方法来为应用程序中的这些属性设置默认值?

EN

回答 1

Stack Overflow用户

发布于 2020-01-25 11:14:56

可以通过修改QDateTime格式来修改TableView、TreeView或ListView中使用的ItemDelegate显示格式。

在此方法中,我们派生StyledItemDelegate以覆盖createEditor和displayText方法,然后将新的委托应用于所需的视图。

DateFormatDelegate.hpp:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
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;
}

然后,可以将新的委托设置为视图:

代码语言:javascript
复制
ui->TableView_MyTable->setIteemDelegate(
      new DateFormatDelegate(ui->TableView_MyTable)));

如果您已经导出了视图,也可以直接在构造函数中应用它。

此方法允许修改任何编辑器小部件的样式,而不必担心以后的修改或视图组织。

不过,可能会有更优雅的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19598314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档