在QListView上显示动态元素的最佳方式(使用Model / View)?

时间:2013-04-26 08:42:44

标签: qt

我们可以实现自己的委托来显示富文本或图像,但ListView只能打印静态项目。你不能把“真正的”物品放进去,你可以画它们。

因此,没有办法显示可点击的超链接,ReTweet按钮或加载异步图像。试想 Facebook或Twitter的时间表列表视图。这就是我正在做的事情。

现在,我的解决方案是在QML中编写listview。其他小部件仍然是本机Qt小部件。 (我不喜欢非原生的纯QML用户界面。)

QML在做这类工作时非常灵活。然后导出我的模型,最后将一个查看器放入我的QMainWindow。但是使用两种编程语言进行编码并尝试与其他本机小部件进行通信非常困难。

那么,显示动态元素的最佳方式是什么?

1 个答案:

答案 0 :(得分:3)

MVC框架对于这种工作并不是很好。

要正确执行此操作,您需要为需要显示的任何动态类型提供委托,然后提供外部机制,以便在这些类型需要重绘时强制模型发出dataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight)。交互式内容会变得更糟,因为您需要强制更新鼠标悬停才能触发委托绘画。

对于这样的东西,你最好使用QGraphicsScene/View。而不是依赖于模型,每个项目都可以自己采取,你仍然只获得必要的重绘(通过它的BSP结构),而且你可以选择硬件加速。