gpt4 book ai didi

qt - 切换图像时 CPU 使用率增加

转载 作者:行者123 更新时间:2023-12-04 18:28:56 31 4
gpt4 key购买 nike

我创建了一个 QML 组件,它模拟无限期显示不同图像的“图像 slider ”。

import QtQuick 2.3

Item {
id: root

// Start auto rotating items
Timer {
interval: 500; running: true; repeat: true
onTriggered:{
itemModel.append(itemModel.get(listView.currentIndex))
itemModel.remove(listView.currentIndex)
}
}

ListView {
id: listView

anchors.fill: parent

interactive: false

model: itemModel
delegate:
Image {
id: bg
width: listView.width
height: listView.height
source: bgSource

asynchronous: true
cache: false
}
}

ListModel {
id: itemModel
ListElement {
bgSource: "ui_elements/images/slideimage01.png"
}
ListElement {
bgSource: "ui_elements/images/slideimage02.png"
}
ListElement {
bgSource: "ui_elements/images/slideimage03.png"
}
}
}

不幸的是,CPU 使用率随着时间的推移不断增加,直到应用程序停止。如果我打印 itemModel 的“计数”变量,它会按预期保持在 3。

我这样运行应用程序:qmlscene SlideImageTest.qml

Qt版本:5.3.2

我使用的三张图片可以在这里找到:

enter image description here

enter image description here

enter image description here

问题

为什么CPU使用率会增加?

最佳答案

快速分析表明,大部分 CPU 周期都花在 itemModel.get 上,试图将内部模型结构转换为 JavaScript 对象,您可以在返回模型后立即使用该对象。

整体修改模型也将涉及 QtQuick 项目的创建和删除,在这种情况下似乎没有必要。

解决这个问题的更有效方法是让 ListView 滚动到下一张图像,而不是在 ListView 当前突出显示的位置更改模型:

Timer {
onTriggered:{
listView.incrementCurrentIndex()
}
}

ListView {
id: listView
keyNavigationWraps: true
highlightMoveDuration: 0
...
}

如果你真的需要保持模型修改方式,C++ model可能会避免昂贵的 JavaScript 转换。

关于qt - 切换图像时 CPU 使用率增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26561287/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com