我可以在基于模型的QListView中使用自定义窗口小部件作为视图吗?

时间:2015-10-12 19:49:29

标签: qt qt5

我想使用Qt5在可滚动列表中呈现一系列复杂数据。由于数据源是时间轴,我想懒得加载它 - 也就是说,我想使用QAbstractItemModel的功能按需加载数据。视图将是只读的。

我可以使用自定义小部件在列表的每个单元格中显示数据吗?

到目前为止,我已经看到了一些建议:

  • 使用QAbstractItemView->setIndexWidget();但是,因为我想懒洋洋地加载数据,所以在加载数据之前为所有索引创建和设置小部件似乎是不必要的。
  • QAbstractItemView->setItemDelegate()与自定义QStyledItemDelegate一起使用,以覆盖paint()。结果看起来不错,但是小部件只是简单地呈现,而不是交互式(无法选择文本等)。

1 个答案:

答案 0 :(得分:0)

您可以使用QGraphicsScene或使用QScrollArea +自定义小部件来完成此操作。没有必要在任何地方使用QAbstractItemModel

如果您将为每个模型项使用自定义小部件,那么您可能会遇到性能和交互性问题。

Ofc,您可以编写自定义委托,但具有交互性的委托是非常复杂的主题 - 必须手动处理鼠标事件,绘制选择等。