Qt:模型/视图框架上的数据转换

时间:2016-12-03 22:37:50

标签: c++ qt model delegates type-conversion

我在哪里必须放置数据适应逻辑,代表级别或模型级别?

使用数据自适应逻辑我的意思是在检索和记录时必须转换数据。例如,在 sqlite 中,date类型不存在,QSqlTableModel将日期检索为字符串(但它们是日期,只是这不会反映在列类型),从而使QStyledItemDelegate在编辑时显示QLineEdit

要将其编辑为日期,您可以执行以下两项操作:

  • 安装自定义委托,将QVariant字符串转换为QVariant日期,并创建QDateEdit(以及保存版本时的反向转换)。

  • 派生QSqlTableModel为相应的列执行相同的转换,而无需安装任何自定义委托(QStyledItemDelegate将识别QVariant日期类型并显示自动QDateEdit

我必须做什么,或者在Qt中做什么是“标准”或通常的方式?

利弊:

  • 在委托方法中,模型不受影响。
  • 在模型方法中,视图不受影响(不需要派生视图)。
  • 使用模型的任何视图都必须为相应的列安装相同的自定义委托。在模型方法中,每个视图都会看到更改而不安装任何委托,我认为,在我看来,它是最佳点,因为模型被认为是共享的,但视图不是。< / LI>
  • 同样的委托类也可以用于标题。在模型方法中,如果您想对它们进行任何转换,则必须派生headerDatadata方法。
  • 在委托方法上,如果要更改视图的模型,则必须卸载以前安装的委托,这会强制您将委托与模型同步(委托绑定到特定表模型的特定列) )。

0 个答案:

没有答案