相关疑难解决方法(0)

如何在Qt C ++应用程序中显示包含大量小部件的可滚动列表?

目标:在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)

c++ windows qt5

2
推荐指数
1
解决办法
797
查看次数

标签 统计

c++ ×1

qt5 ×1

windows ×1