如何在Qt的列表小部件中绘制进度条

4
我想要一个需要在QListWidget中处理的项目列表。与Windows Media Player CD导入类似,每个列表项应该有一个进度条。
现在似乎有一种方法可以通过创建常规进度条,使用QPixmap :: grabWidget()将其外观保存在QPixmap中,然后通过QListWidgetItem :: setIcon()将此QPixmap添加为QListWidgetItem的图标来实现此目的。然而,这似乎非常奇怪。
您是否知道更优雅的方法在列表部件中实现进度条?

2
请查看Qt的“Torrent Example”项目。它在表格中放置了一个进度条小部件,工作方式非常相似。http://doc.trolltech.com/4.5/network-torrent.html - Evan Teran
2个回答

4
每个 QListWidget 中的项目都可以由您选择的 QWidget 表示,而不是默认渲染(文本)。 您可以通过调用 QListWidget::setItemWidget() 来设置。 在这种情况下,我建议使用 QProgressBar 作为渲染小部件--您应该会得到所需的结果。
QListWidget::setItemWidget() 的文档中:

此函数仅应用于在列表窗口小部件项的位置上显示静态内容。 如果要显示自定义动态内容或实现自定义编辑器窗口小部件,请改用 QListView 并子类化 QItemDelegate


1
你可以通过将列表小部件转换为模型/视图/委托组合来实现。然后,您可以在列表视图上设置一个委托,覆盖绘制函数并在任何位置绘制进度条。但是,我不知道将实际的QProgressBar小部件放入绘图区域有多容易。
或者,您可以考虑创建自己的列表小部件容器,了解进度条的情况。

这种方法存在一个大问题:在进度条中丢失动画会导致无法创建“繁忙”进度条。 - Jeka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接