使用 QItemDelegate 在 QTableView 中显示其他数据

发布于 2024-08-16 19:35:59 字数 206 浏览 11 评论 0原文

我有一个与 QSqlTableModel 连接的 QTableView。
在第一列中,只有以下格式的日期:2010-01-02
我希望此列以这种格式显示日期(但不更改实际数据):02.01.2010
我知道我必须为此列创建一个 QItemDelegate,但我不知道如何读取现有数据并用不同的内容覆盖它。你知道如何管理吗?

I have a QTableView connected with an QSqlTableModel.
In the first column, there are only dates at this format: 2010-01-02
I want this column to show the date at this format (but without changing the real data): 02.01.2010
I know that I have to create an QItemDelegate for this column, but I don't know how I can read the existing data and overwrite it with something different. You have any idea how to manage that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ˇ宁静的妩媚 2024-08-23 19:36:00

最简单的解决方案是创建一个 QStyledItemDelegate 子类并重新实现 displayText(...) ie

class DateFormatDelegate : public QStyledItemDelegate
{
public:
 DateFormatDelegate (QString dateFormat, QObject *parent = 0) : 
  QStyledItemDelegate(parent),
  m_dateFormat(dateFormat)
 {
 }

 virtual QString displayText(const QVariant & value, const QLocale & locale ) const
 {
  Q_UNUSED(locale);
  return value.toDate().toString(m_dateFormat);
 }

private:
 QString m_dateFormat;
};

然后在你的视图中 -

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this));

The simplest solution is to create a QStyledItemDelegate subclass and reimplement displayText(...) ie

class DateFormatDelegate : public QStyledItemDelegate
{
public:
 DateFormatDelegate (QString dateFormat, QObject *parent = 0) : 
  QStyledItemDelegate(parent),
  m_dateFormat(dateFormat)
 {
 }

 virtual QString displayText(const QVariant & value, const QLocale & locale ) const
 {
  Q_UNUSED(locale);
  return value.toDate().toString(m_dateFormat);
 }

private:
 QString m_dateFormat;
};

Then in your view -

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this));
撞了怀 2024-08-23 19:36:00

项目委托不一定会更改数据,它只是呈现数据。另外,如果您使用的是 Qt 4.4 或更高版本,请查看 QStyledItemDelegate ——它具有主题感知功能并且看起来会更好。

这篇文章中有一个项目委托的示例(这似乎是官方文档的镜像现已关闭或消失)。

由于您真正想做的只是自定义文本,因此您是否考虑过使用代理模型并仅返回日期列的 DisplayRole 的自定义 QString?

An item delegate doesn't necessarily change the data, it just renders the data. Also, if you're using Qt 4.4 or newer, look at QStyledItemDelegate instead--it's theme-aware and will look nicer.

There's an example of item delegates in this article (which seems to be a mirror of official documentation that is now down or gone).

Since all you really want to do is customize the text, have you considered using a proxy model instead and just returning your custom QString for the date column's DisplayRole?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文