diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2012-05-25 12:50:21 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-25 21:42:14 +0200 |
commit | 57f243594e83708f2daa8147901cbea965e5c295 (patch) | |
tree | 035adc2734192023a043c108db6fddf2d9c27159 /examples/opengl/hellowindow/main.cpp | |
parent | 7381328bcc37283be97eedddc24c46be1e38490e (diff) |
OpenGL/HelloWindow example: Fix resource leaks.
Change-Id: Icf776b5581b3a632e8cef19af1059503146c158c
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
Diffstat (limited to 'examples/opengl/hellowindow/main.cpp')
-rw-r--r-- | examples/opengl/hellowindow/main.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/examples/opengl/hellowindow/main.cpp b/examples/opengl/hellowindow/main.cpp index e1fde9b5b8..1c11639ebc 100644 --- a/examples/opengl/hellowindow/main.cpp +++ b/examples/opengl/hellowindow/main.cpp @@ -66,15 +66,18 @@ int main(int argc, char **argv) QSize windowSize(400, 320); int delta = 40; - Renderer *rendererA = new Renderer(format); + QList<QWindow *> windows; + QSharedPointer<Renderer> rendererA(new Renderer(format)); + HelloWindow *windowA = new HelloWindow(rendererA); windowA->setGeometry(QRect(center, windowSize).translated(-windowSize.width() - delta / 2, 0)); windowA->setWindowTitle(QLatin1String("Thread A - Context A")); windowA->setVisible(true); + windows.prepend(windowA); QList<QThread *> renderThreads; if (multipleWindows) { - Renderer *rendererB = new Renderer(format, rendererA); + QSharedPointer<Renderer> rendererB(new Renderer(format, rendererA.data())); QThread *renderThread = new QThread; rendererB->moveToThread(renderThread); @@ -84,19 +87,21 @@ int main(int argc, char **argv) windowB->setGeometry(QRect(center, windowSize).translated(delta / 2, 0)); windowB->setWindowTitle(QLatin1String("Thread A - Context A")); windowB->setVisible(true); + windows.prepend(windowB); HelloWindow *windowC = new HelloWindow(rendererB); windowC->setGeometry(QRect(center, windowSize).translated(-windowSize.width() / 2, windowSize.height() + delta)); windowC->setWindowTitle(QLatin1String("Thread B - Context B")); windowC->setVisible(true); + windows.prepend(windowC); for (int i = 1; i < QGuiApplication::screens().size(); ++i) { QScreen *screen = QGuiApplication::screens().at(i); - Renderer *renderer = new Renderer(format, rendererA, screen); + QSharedPointer<Renderer> renderer(new Renderer(format, rendererA.data(), screen)); renderThread = new QThread; renderer->moveToThread(renderThread); - renderThreads << renderThread; + renderThreads.prepend(renderThread); QRect screenGeometry = screen->availableGeometry(); QPoint center = screenGeometry.center(); @@ -110,6 +115,7 @@ int main(int argc, char **argv) QChar id = QChar('B' + i); window->setWindowTitle(QLatin1String("Thread ") + id + QLatin1String(" - Context ") + id); window->setVisible(true); + windows.prepend(window); } } @@ -118,8 +124,12 @@ int main(int argc, char **argv) renderThreads.at(i)->start(); } - app.exec(); + const int exitValue = app.exec(); for (int i = 0; i < renderThreads.size(); ++i) renderThreads.at(i)->wait(); + qDeleteAll(windows); + qDeleteAll(renderThreads); + + return exitValue; } |