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

发布于 2024-08-05 19:16:30 字数 318 浏览 4 评论 0原文

我想要一个需要在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

离线来电— 2024-08-12 19:16:30

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

来自 QListWidget::setItemWidget()

该函数只能用于
在以下位置显示静态内容
列表小部件项目。如果你想
显示自定义动态内容或
实现自定义编辑器小部件,使用
QListView 和子类 QItemDelegate
相反。

Each item in a QListWidget can be represented by a QWidget of your choice, rather than the default rendering (text). You can set this by calling QListWidget::setItemWidget(). In this case, I'd recommend using QProgressBar as the rendering widget -- you should get the desired result.

From the documentation of QListWidget::setItemWidget():

This function should only be used to
display static content in the place of
a list widget item. If you want to
display custom dynamic content or
implement a custom editor widget, use
QListView and subclass QItemDelegate
instead.

|煩躁 2024-08-12 19:16:30

您可以通过将列表小部件转换为模型/视图/委托组合来做到这一点。然后,您可以在列表视图上设置一个委托,该委托会覆盖绘制函数并在您想要的任何位置绘制进度条。但是,我不知道将实际的 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文