QTreeView内存消耗

gri*_*yvp 6 qt qtreeview

我现在正在测试QTreeView功能,我对此感到惊讶.似乎QTreeView内存消耗取决于项目数O_O.这是非常不寻常的,因为这种类型的模型视图容器仅跟踪正在显示的项目,其余项目在模型中.我编写了一个以下代码,其中包含一个不包含任何数据的简单模型,并且只报告它有1000万个项目.使用MFC,具有此类模型的Windows API或.NET树/列表将不占用内存,因为它将仅显示10-20个可见元素,并将在滚动/扩展项目时请求更多模型.但是使用Qt,这种简单的模型会导致约300Mb的内存消耗.越来越多的项目将增加内存消耗.也许任何人都可以暗示我做错了什么?:)

#include <QtGui/QApplication>
#include <QTreeView>
#include <QAbstractItemModel>

class CModel : public QAbstractItemModel
{
  public: QModelIndex index
  (
    int i_nRow,
    int i_nCol,
    const QModelIndex& i_oParent = QModelIndex()
  ) const
  {
    return createIndex( i_nRow, i_nCol, 0 );
  }

  public: QModelIndex parent
  (
    const QModelIndex& i_oInex
  ) const
  {
    return QModelIndex();
  }

  public: int rowCount
  (
    const QModelIndex& i_oParent = QModelIndex()
  ) const
  {
    return i_oParent.isValid() ? 0 : 1000 * 1000 * 10;
  }

  public: int columnCount
  (
    const QModelIndex& i_oParent = QModelIndex()
  ) const
  {
    return 1;
  }

  public: QVariant data
  (
    const QModelIndex& i_oIndex,
    int i_nRole = Qt::DisplayRole
  ) const
  {
    return Qt::DisplayRole == i_nRole ? QVariant( "1" ) : QVariant();
  }
};

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  QTreeView oWnd;
  CModel oModel;
  oWnd.setUniformRowHeights( true );
  oWnd.setModel( & oModel );
  oWnd.show();
  return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

gri*_*yvp 3

如果我在示例源中将 QTreeView 替换为 QTableView,则不会消耗内存。所以看来QListView和QTreeView不适合用于大量数据,而必须使用QTableView。