I can watch the memory consumption of the process by calling "watch /proc/(pid)/status". I found a few more interesting things. This problem does not arise when placing a QPixmap in the QLabel instead of text. Also, if I hide() the QScrollArea, the problem goes away as well.
Here's the full code for the app:
mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
{
Q_OBJECT
public:
private:
void buildWidget();
void retranslateWidget();
private slots:
void rebuildScrollArea();
};
#endif // MYWIDGET_H
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
class QVBoxLayout;
class QScrollArea;
class QLabel;
class QPushButton;
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = 0);
private:
void buildWidget();
void retranslateWidget();
QVBoxLayout *layout;
QScrollArea *scroll;
QLabel *text;
QPushButton *button;
private slots:
void rebuildScrollArea();
};
#endif // MYWIDGET_H
To copy to clipboard, switch view to plain text mode
mywidget.cpp
#include "mywidget.h"
#include <QScrollArea>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QApplication>
#include <QImage>
{
scroll = NULL;
setFixedHeight(240);
setFixedWidth(320);
buildWidget();
connect(button, SIGNAL(clicked()), this, SLOT(rebuildScrollArea()));
}
void MyWidget::buildWidget()
{
setLayout(layout);
layout->addWidget(button);
rebuildScrollArea();
}
void MyWidget::rebuildScrollArea()
{
if (scroll) scroll->deleteLater();
scroll->setWidgetResizable(true);
//scroll->hide();
text->setWordWrap(true);
//text->setPixmap(QPixmap(":/stewart.png"));
//text->adjustSize();
scroll->setWidget(text);
layout->addWidget(scroll);
retranslateWidget();
}
void MyWidget::retranslateWidget()
{
button->setText(tr("Click to Rebuild"));
text->setText(tr("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."));
}
#include "mywidget.h"
#include <QScrollArea>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QApplication>
#include <QImage>
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
scroll = NULL;
setFixedHeight(240);
setFixedWidth(320);
buildWidget();
connect(button, SIGNAL(clicked()), this, SLOT(rebuildScrollArea()));
}
void MyWidget::buildWidget()
{
layout = new QVBoxLayout;
setLayout(layout);
button = new QPushButton;
layout->addWidget(button);
rebuildScrollArea();
}
void MyWidget::rebuildScrollArea()
{
if (scroll) scroll->deleteLater();
scroll = new QScrollArea;
scroll->setWidgetResizable(true);
//scroll->hide();
text = new QLabel;
text->setWordWrap(true);
//text->setPixmap(QPixmap(":/stewart.png"));
//text->adjustSize();
scroll->setWidget(text);
layout->addWidget(scroll);
retranslateWidget();
}
void MyWidget::retranslateWidget()
{
button->setText(tr("Click to Rebuild"));
text->setText(tr("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."));
}
To copy to clipboard, switch view to plain text mode
main.ccp
#include <QtGui/QApplication>
#include "mywidget.h"
#include "zdefaultstyle.h"
int main(int argc, char *argv[])
{
MyWidget w;
#if defined(Q_WS_S60)
w.showMaximized();
#else
w.show();
#endif
return a.exec();
}
#include <QtGui/QApplication>
#include "mywidget.h"
#include "zdefaultstyle.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
#if defined(Q_WS_S60)
w.showMaximized();
#else
w.show();
#endif
return a.exec();
}
To copy to clipboard, switch view to plain text mode
Bookmarks