目标:在Windows 7、10下的Qt5 C ++应用程序中拥有可滚动的自定义窗口小部件列表,数量达数千(甚至更多)。
问题:将窗口最小化到任务栏并再次还原后,程序停止响应。它不会崩溃。CPU使用率常数为25%。即使等待了几分钟,GUI也没有再次响应。此外,大量的内存被一般消费(超过200米),我认为这是太多甚至100K QLabels(近似2K每QLabel)。
以下是针对类似问题的一些建议解决方案,我认为这种解决方案不适合我的情况。
示例:以下示例说明了该问题。为了演示起见,使用了QLabels列表,但是它可以是从QWidget派生的任何类。
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QLabel>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
};
#endif // MAINWINDOW_H
Run Code Online (Sandbox Code Playgroud)
MainWindow.cpp
#include "MainWindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
QScrollArea *scrollArea = new QScrollArea(this);
QFrame *frame = new QFrame();
QVBoxLayout *l = new QVBoxLayout(frame);
int N = 121004;
scrollArea->setWidget(frame);
scrollArea->setWidgetResizable(true);
for (int …Run Code Online (Sandbox Code Playgroud)