【问题标题】:Qt: List of (custom) QWidgets without performance problemsQt:没有性能问题的(自定义)QWidget 列表
【发布时间】:2018-01-16 21:34:47
【问题描述】:

我现在正在创建一个 Qt 应用程序并遇到以下问题: 我设计了一个带有一些标签和复选框的自定义 QWidget。应用程序现在应该显示自定义 QWidget 的列表。我尝试了 QListWidget 但对于我的用例来说非常慢。我想为我的自定义 QWidget 添加超过 6000 个元素。如果我创建元素的这些实例并将其添加到 QListWidget 应用程序将崩溃。

哪种方法最适合我的问题?

非常感谢!

【问题讨论】:

  • 使用 QListView..
  • @Mosa 您需要使用QListView+QStyledItemDelegate 而不是添加小部件。在委托中,您可以手动处理鼠标/键盘输入。 Ofcouse 它比直接使用小部件更复杂,但你需要高性能,所以这样做。其他(更适合您的情况)方法是使用 QtQuick/QML 或 QGraphicsScene

标签: c++ qt widget qlistwidget qlistview


【解决方案1】:

正如其他人所指出的,QListWidgetQListView 是要走的路。另请注意,您不应使用它显示自定义小部件,请尝试使用自定义 QStyledItemDelegate 代替并自己绘制项目。根据您的需要,这可能会很快变得复杂。我已经使用QTableView 这种方法处理了成千上万个项目而没有性能问题。

如果您确实需要显示自定义小部件,请查看我前段时间为此目的编写的库:longscroll-qt

【讨论】:

  • _+1 用于您所做的开源解决方案
  • 感谢您的回答。我可以将 QListView+QStyledItemDelegate-approach 信号和插槽和突出显示功能(鼠标在元素上方)用于每个元素的每一行吗?我使用了 QListWidget 但它非常非常慢...
  • 如果您将其悬停,Qt 将重新绘制该单元格,并且您必须以不同的方式绘制它。您可以通过测试QStyleOption::state 来检测鼠标悬停QStyle::State_MouseOver
猜你喜欢
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多