我有一個Loader
對象,加載一些非常隆起的組件。某些事件在負載的中間到達,需要加載停止並返回以清空Loader
。可能嗎?如何在加載器中取消加載組件?
回答
中止對象創建
作爲記錄由Qt中,三種方法存在卸載/中止的對象實例化:
- 設置
Loader.active
到false
- 設置
Loader.source
爲空字符串 - 設置
Loader.sourceComponent
到undefined
異步行爲
爲了能夠裝載過程中改變這些屬性, Loader.asynchronous
應該是true
,否則GUI線程正忙於加載對象。您還需要QQmlIncubationController
以便您的QQmlEngine
控制用於對象孵化的空閒時間。沒有這樣的控制器Loader.asynchronous
不起任何作用。請注意,如果場景包含QQuickWindow
,QQmlApplicationEngine
會自動安裝默認控制器。
蟲蟲
直到最後測試Qt的版本(Qt的5.8.0,5.9.0測試版),嚴重的存儲器中止未完成的對象孵育(至少在某些情況下,當包括泄漏存在例如在derM的答案中)導致大型組件快速的內存使用增加。 A bug report創建包括一個建議的解決方案。
我不知道你的issu是什麼,那些對象在加載器完成之前銷燬,但也許問題出在那裏?如果沒有,這應該工作: 如果它沒有幫助,請添加一些代碼到您的問題,這再現了您的問題。
main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
ApplicationWindow {
id: root
visible: true
width: 400; height: 450
Button {
text: (complexLoader.active ? 'Loading' : 'Unloading')
onClicked: complexLoader.active = !complexLoader.active
}
Loader {
id: complexLoader
y: 50
width: 400
height: 400
source: 'ComplexComponent.qml'
asynchronous: true
active: false
// visible: status === 1
}
BusyIndicator {
anchors.fill: complexLoader
running: complexLoader.status === 2
visible: running
}
}
ComplexComponent.qml
import QtQuick 2.0
Rectangle {
id: root
width: 400
height: 400
Grid {
id: grid
anchors.fill: parent
rows: 50
columns: 50
Repeater {
model: parent.rows * parent.columns
delegate: Rectangle {
width: root.width/grid.columns
height: root.height/grid.rows
color: Qt.rgba(Math.random(index),
Math.random(index),
Math.random(index),
Math.random(index))
}
}
}
}
如果你保持點擊按鈕的速度非常快,它永遠不會釋放爲以前的對象分配的內存,並最終導致bad_alloc。 –
你多久點擊一次我的'ComplexComponent'? :D我選擇了一個計時器*每200或500毫秒點擊一次*,並在多分鐘內完成。但是,是的,內存隨着時間的推移而增加... – derM
我將計時器設置爲200,但將行數和列數增加到200.它增長內存速度非常快,並且崩潰。 –
- 1. 如何在構造函數中加載組件加載?
- 2. 如何在加載頁面之前在iframe中加載加載消息
- 3. 如何取消在Web瀏覽器中加載資源?
- 4. 加載組件
- 5. 加載一個數組類加載器
- 6. 如何在UItableview中加載footerview加載?
- 7. 在javascript中取消加載頁面
- 8. 取消在Android上的WebView中加載
- 9. 如何使用Delphi在virtualtree組件中保存/加載/從文件加載?
- 10. 如何在點擊加載QML組件
- 11. 如何加載組件共同在angular2
- 12. javascript取消圖像加載
- 13. 延遲加載組件加載
- 14. 在Ruby中加載Url類加載器
- 15. AngularJS不能在加載器中加載
- 16. 如何在UIWebView加載內容時顯示加載消息?
- 17. 如何在加載iFrame時顯示加載消息?
- 18. 如何添加頁面加載後消失的加載文本
- 19. 頁面加載取消事件
- 20. 取消組件卸載?
- 21. 機器人加載消息
- 22. 如何在Actionscript3中加載預加載器?
- 23. 我如何在webpack中加載一個加載器?
- 24. 如何在jboss 7.1.x中加載部署類加載器
- 25. 如何在JVM中使用類加載器加載類兩次?
- 26. 加載組件/ 4
- 27. CodeMirror - 在頁面加載時在編輯器中加載文件
- 28. 如何在標籤中加載數組?
- 29. Symfony自動加載器組件不會加載我的類
- 30. 如何知道組件何時加載?
應該是,與'異步'裝載機。但是這個屬性讓我失望了。儘管'UI'沒有按照承諾('BusyIndicator'運行)凍結,但它仍然完全沒有響應。 – derM
我有'異步'設置,但問題是它在裝載程序沒有完成加載時會破壞對象,這會導致警告和錯誤。 –
將'active'設置爲false或將'source' /'sourceComponent'設置爲null會怎樣? – folibis