我如何知道我的 QItemDelegate 何时是列表中的最后一项?

Posted

技术标签:

【中文标题】我如何知道我的 QItemDelegate 何时是列表中的最后一项?【英文标题】:How can I know when my QItemDelegate is the last item in the list? 【发布时间】:2015-08-12 17:36:50 【问题描述】:

我的自定义项目委托覆盖了这个函数:

void TileToolDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const

一切都很好,画得很好,除了由于某种原因,'option.viewItemPosition' 总是 QStyleOptionViewItem::ViewItemPosition::Invalid

我正在尝试检查该项目是否是列表中的最后一项:

//Draw the dropshadow, if this is the final item in the list.
if(option.viewItemPosition == QStyleOptionViewItem::ViewItemPosition::End
|| option.viewItemPosition == QStyleOptionViewItem::ViewItemPosition::OnlyOne)

    //...

调试显示,对于每个项目,结果都是 ViewItemPosition::Invalid。 =(...

我的模型应该提供这些详细信息吗?如果是这样,怎么做? 我的模型继承了QAbstractListModel,视图是QListView。

注意:因为我不知道为什么这不起作用,我只是通过将 QModelIndex 与 0rowCount()-1 进行比较来作弊,但我想知道为什么这不起作用。

【问题讨论】:

【参考方案1】:

据我了解 viewItemPosition 未在 QListView 的绘制事件中设置。我已经检查过了here。在我的沙箱中,无论项目在顶部还是底部,它都会返回 0。

【讨论】:

感谢您的调查!当您说“据您所知”时,您的意思是 supposed 为 0,还是这是 Qt 的错误? 我认为 QListView 的绘制事件应该设置此属性并将其进一步传递给委托的绘制事件,但它不会发生。如果为真,则可能是功能请求。 我想我应该在这里链接到错误报告,以供后代使用:QTBUG-47755

以上是关于我如何知道我的 QItemDelegate 何时是列表中的最后一项?的主要内容,如果未能解决你的问题,请参考以下文章

在递归方法中如何知道我的所有线程何时完成执行?

如何使用 QItemDelegate 更改 QTableView 文本颜色?

如何让 UIPageViewController 知道我的异步下载何时完成?

我如何知道我的 apk 何时在 Play 商店中更新?

如何知道我的应用何时聚焦或不聚焦——反应原生?

异步队列,文件流结束如何知道两者何时完成