我的应用程序开始消耗大量内存。第一个镜头是 MNG 动画缓存,但看起来它们只是不共享。因此,我在构造函数/析构函数中创建了一个带有调试打印的 TestItem,当通过视频停止信号更改其源时,我看到 Loader 不工作属性:
import QtQuick 1.1
import QtMultimediaKit 1.1
Rectangle {
id:root
width: 800
height: 480
Video {
id: video1
anchors.fill: parent
source: "test.mp4"
onStopped: {
loader1.source= "Test2.qml";
}
}
Loader {
id:loader1
onSourceChanged: {
console.debug("source changed to "+source)
}
}
MouseArea {
anchors.fill: parent
onPressed: {
loader1.source= "Test1.qml";
video1.play();
}
}
}
因此,当我单击 4 次时,我会得到如下控制台输出:
TestItem(0x1b4fc00)
source changed to file:///opt/Test/qml/TestLoaderBug/Test1.qml
TestItem(0x2047ba0)
source changed to file:///opt/Test/qml/TestLoaderBug/Test2.qml
TestItem(0x2046720)
source changed to file:///opt/Test/qml/TestLoaderBug/Test1.qml
~ TestItem(0x2047ba0)
TestItem(0x2050560)
source changed to file:///opt/Test/qml/TestLoaderBug/Test2.qml
TestItem(0x204fad0)
source changed to file:///opt/Test/qml/TestLoaderBug/Test1.qml
~ TestItem(0x2050560)
TestItem(0x2051e40)
source changed to file:///opt/Test/qml/TestLoaderBug/Test2.qml
TestItem(0x2051330)
source changed to file:///opt/Test/qml/TestLoaderBug/Test1.qml
~ TestItem(0x2051e40)
TestItem(0x2052e90)
source changed to file:///opt/Test/qml/TestLoaderBug/Test2.qml
当我关闭我的应用程序时,所有剩余的对象都被删除:
~ TestItem(0x1b4fc00)
~ TestItem(0x2046720)
~ TestItem(0x204fad0)
~ TestItem(0x2051330)
~ TestItem(0x2052e90)
为什么 onStopped 信号会产生这样的行为?有什么解决办法吗?
在 Ubuntu 12.04 上使用 libqt4-declarative(版本:4:4.8.1-0ubuntu4.2)和 libdeclarative-multimedia(版本:1.2.0-1ubuntu2)进行测试。