xxxxxx.h
{
...
Q_PROPERTY( QList<QObject*> xmlNodeList READ getXmlNodeList WRITE setXmlNodeList NOTIFY xmlNodeListChanged)
public:
....
QList<QObject*> getXmlNodeList();
void setXmlNodeList(QList<QObject*> xmlNodeList);
...
signals:
.....
void xmlNodeListChanged()
....
private:
.....
QList<QObject*> xmlNodeList;
.....
public slots:
void test();
.....
}
--------------------------------------------------------------------------------------------------------------
xxxxxx.cpp
xxxxx::xxxxx(int &argc, char **argv): QApplication(argc,argv)
{
.....
for( int i = 1; i < 200000;i++)
{
xmlNodeList.append(new XmlNode("1","test1","test11"));
xmlNodeList.append(new XmlNode("2","test2","test21"));
xmlNodeList.append(new XmlNode("3","test3","test31"));
}
......
context->setContextProperty("thisApp",this);
....
viewer.setSource (QUrl("ui/main.qml"));
....
}
QList<QObject*> xxxxxx::getXmlNodeList(){
return this->xmlNodeList;
}
void xxxxx::setXmlNodeList(QList<QObject*> xmlNodeList)
{ if(this->xmlNodeList !=xmlNodeList)
{
this->xmlNodeList=xmlNodeList;
emit xmlNodeListChanged();
}
}
void xxxxxx::test()
{
qDebug()<<"test............";
QList<QObject*> xmlNodeList1;
QList<QObject*> xmlNodeListT = xmlNodeList;
setXmlNodeList(xmlNodeList1);
qDeleteAll(xmlNodeListT.begin(),xmlNodeListT.end());
xmlNodeListT.clear();
qDebug()<<"o------------------------k";
}
--------------------------------------------------------------------------------------------------------------
main.qml
{
.....
Rectangle {
x:700
y:150
width: 200
height: 100
color:"blue"
ListView {
width: 200; height:200
anchors.fill: parent
model: thisApp.xmlNodeList
delegate: Rectangle
{
height: 25
width: 100
Column
{
spacing: 40
Text { text: modelData.name +"|"
+modelData.value +"|"
+modelData.lable
}
}
}
}
}
......
Rectangle{
x:600
y:600
width: 80
height: 25
color:"red"
Text {
id: btn_xml
anchors.centerIn: parent
text: "测试内存"
}
MouseArea{
anchors.fill: parent
onClicked: {
thisApp.test()
}
}
}....
}
--------------------------------------------------------------------------------------------------------------
用qml显示30w条数据,测试目的是否把QList<new Qobject*..内存空间是否清除;
1.经测试,点击“test()”,其中“qDeleteAll(xmlNodeListT.begin(),xmlNodeListT.end()); xmlNodeListT.clear();”已经把xmlNodeList清空,但是内存已经占了80多M;
2.如果 把qml中“model: thisApp.xmlNodeList“ 去掉,数据不在qml中显示,点击“test()”,运行的结果为12M。
请各位看看,是不是qml中的model,造成的这个内存为清空的现象,有什么方法清空内存