6
我現在正在測試QTreeView功能,並且我爲一件事感到驚訝。看來QTreeView內存消耗取決於項目數O_O。這是非常不尋常的,因爲這種類型的模型視圖容器只跟蹤正在顯示的項目,其餘項目在模型中。我用一個簡單的模型編寫了一個下面的代碼,它不包含任何數據,只是報告它擁有1000萬個項目。使用MFC,使用這種模型的Windows API或.NET樹/列表將不會佔用內存,因爲它只顯示10-20個可見元素,並且會在滾動/擴展項目時請求更多模型。但是用Qt,這樣簡單的模型會導致〜300Mb的內存消耗。越來越多的項目會增加內存消耗。也許任何人都可以暗示我我做錯了什麼? :)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();
}
必須是我見過的最怪異的代碼樣式之一:) – 2010-05-18 12:13:49
@Idan K:風格被稱爲「可讀」:-)大多數編程風格被稱爲「cram-as-much-on-my-儘可能小的屏幕「,並且來自顯示器爲80x25(字符,而不是像素)的時代。 – 2010-05-18 12:18:00
@aaron:好吧,我不會那麼做,這只是我第一次看到「公開」:每個公共方法的前面,以及參數的風格方式,但我不是批評,只是說我以前沒見過。 :) – 2010-05-18 12:40:47