如何在 Qt 中的列表小部件内绘制进度条
我想要一个需要在 QListWidget 中处理的项目列表。与 Windows Media Player CD 导入类似,列表中的每个项目都应该有一个进度条。
现在似乎有一种方法可以通过创建常规进度条来做到这一点,使用 QPixmap::grabWidget() 来将其外观保存在 QPixmap 中,然后添加此 <通过 QListWidgetItem::setIcon()
将 code>QPixmap 作为 QListWidgetItem
的图标。 然而,这似乎非常古怪。
您知道在列表小部件内实现进度条的更优雅的方法吗?
I want to have a list of items that need to be processed in a QListWidget
. Similar to Windows Media Player CD import, there should be a progress bar for every item in the list.
Now there seems to be a way to do this by creating a regular progress bar, using QPixmap::grabWidget()
to save its appearance in a QPixmap
and then adding this QPixmap
as Icon to the QListWidgetItem
via QListWidgetItem::setIcon()
.
However, this seems to be horribly wacky.
Do you know a more elegant way to achieve a progress bar inside a list widget?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
QListWidget
中的每个项目都可以由您选择的QWidget
表示,而不是默认呈现(文本)。您可以通过调用QListWidget::setItemWidget()< 来设置它/代码>
。在这种情况下,我建议使用
QProgressBar
< /a> 作为渲染小部件 - 您应该得到所需的结果。来自
QListWidget::setItemWidget()
:Each item in a
QListWidget
can be represented by aQWidget
of your choice, rather than the default rendering (text). You can set this by callingQListWidget::setItemWidget()
. In this case, I'd recommend usingQProgressBar
as the rendering widget -- you should get the desired result.From the documentation of
QListWidget::setItemWidget()
:您可以通过将列表小部件转换为模型/视图/委托组合来做到这一点。然后,您可以在列表视图上设置一个委托,该委托会覆盖绘制函数并在您想要的任何位置绘制进度条。但是,我不知道将实际的 QProgressBar 小部件放入绘图区域有多容易。
或者,您可以考虑制作自己的列表小部件,例如了解进度条的容器。
You could do it by converting your list widget into a model/view/delegate combo. Then you can set a delegate on the list view that overrides the paint functions and draws the progress bar wherever you want it. I don't know how easy it would be to get an actual
QProgressBar
widget into the drawing area, however.Alternately, you could consider making your own list-widget like container that knows about the progress bars.