Estoy probando la funcionalidad QTreeView en este momento, y me sorprendió una cosa. Parece que el consumo de memoria de QTreeView depende del recuento de elementos O_O. Esto es muy inusual, ya que los contenedores de vista de modelo de ese tipo solo realizan un seguimiento de los elementos que se muestran, y el resto de los elementos se encuentran en el modelo. He escrito un código siguiente con un modelo simple que no contiene datos y solo informa que tiene 10 millones de elementos. Con MFC, la API de Windows o el árbol/lista .NET con dicho modelo no tomará memoria, ya que mostrará solo de 10 a 20 elementos visibles y solicitará un modelo para más al desplazarse/expandir los elementos. Pero con Qt, un modelo tan simple da como resultado ~ 300Mb de consumo de memoria. El aumento de la cantidad de elementos aumentará el consumo de memoria. ¿Tal vez alguien puede darme pistas de lo que estoy haciendo mal? :)Consumo de memoria QTreeView
#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();
}
que tiene que ser uno de los estilos de código más raro que he visto :) –
@Idan K: El estilo se llama "legible" :-) La mayoría de los estilos de programación se llaman "cram-as-much-on-my- minúscula como sea posible "y fecha de una era donde los monitores eran 80x25 (caracteres, no píxeles). –
@aaron: bueno, no llegaría tan lejos, es la primera vez que veo 'público:' frente a cada método público, y también la forma en que se diseñan los parámetros, pero no criticaba, solo decía no lo he visto antes :) –