Потребление памяти QTreeView

Я тестирую функциональность QTreeView прямо сейчас, и я был поражен одной вещью. Кажется, что потребление памяти QTreeView зависит от O_O количества объектов. Это очень необычно, начиная с контейнеров образцового представления такого типа только отслеживает для объектов, отображаемых, и отдых объектов находится в модели. Я написал следующий код с простой моделью, которая не содержит данных и просто сообщает, что это имеет 10 миллионов объектов. С 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();
}
6
задан grigoryvp 18 May 2010 в 12:01
поделиться

1 ответ

Если я заменю QTreeView на QTableView в источнике образцов, память не будет использоваться. Таким образом, кажется, что QListView и QTreeView не предназначены для использования с очень большим объемом данных, и вместо этого следует использовать QTableView.

0
ответ дан 18 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: