gpt4 book ai didi

c++ - QProgressBar::setValue(int) 导致内存泄漏?

转载 作者:行者123 更新时间:2023-11-28 05:12:54 29 4
gpt4 key购买 nike

我将 Qt 5.7 用于带有 QProgressBar 的 GUI 应用程序。我怀疑可能存在内存泄漏,因为在运行时内存使用量增加了大约 50MB/s。我可以将问题缩小到一行代码。

QProgressBar *pbarQuality;
...
int curQuality = data.getQuality();
if (curQuality < 0) {
curQuality = 0;
qWarning("Value set to 0. ");
}
if (curQuality > 100) {
curQuality = 100;
qWarning("Value set to 100. ");
}
ui.pbarQuality->setValue(curQuality); //The memory problem doesn't occur when this single line is commented out

QProgressBar(pbarQuality) 的值仅用于显示。它没有在其他任何地方使用。

我发现这是一个非常奇怪的行为。我错过了什么吗?

这是 Qt Designer 自动生成的代码:

        pbarQuality = new QProgressBar(frame_5);
pbarQuality->setObjectName(QStringLiteral("pbarQuality"));
pbarQuality->setGeometry(QRect(10, 50, 130, 23));
pbarQuality->setValue(24);

最佳答案

尝试将 setValue 替换为 pbarQuality.update(); QCoreApplication::processEvents(); 看看是否重现了问题。如果是这样,您将利用嵌套事件循环在阻塞代码运行时保持 GUI 响应,这是一件坏事。 setValue 调用 processEvents 作为解决损坏的用户代码的天真方法。恕我直言,这是一个危险的忙。唯一的解决方法是恢复您的代码并将控制权返回给主事件循环而不是阻塞。

This answer展示了如何通过利用 QImage 的 RAII 行为来避免图像 Storm 的影响,并链接到另一个演示通过利用 OpenGL 进行自由图像缩放的答案。

关于c++ - QProgressBar::setValue(int) 导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43182542/

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