diff options
author | Andreas Aardal Hanssen <andreas.hanssen@tandberg.com> | 2010-07-14 10:02:08 (GMT) |
---|---|---|
committer | Toby Tomkins <toby.tomkins@nokia.com> | 2010-07-16 00:34:43 (GMT) |
commit | aea1b6326d598b07a283a02863864850ac76d283 (patch) | |
tree | 32000ef2936b28f237db5f4bec23d5ddca206192 /src | |
parent | 29b2afa8d6689b96c185a779fa8353c1018dc0a7 (diff) | |
download | Qt-aea1b6326d598b07a283a02863864850ac76d283.zip Qt-aea1b6326d598b07a283a02863864850ac76d283.tar.gz Qt-aea1b6326d598b07a283a02863864850ac76d283.tar.bz2 |
Work around memory leak issue in grid and linear layouts.
These classes create a new QWidget and assign it to a static pointer
which is never cleaned up. Using Q_GLOBAL_STATIC ensures that they are
deleted on library unload. This is really just a cosmetic change that
removes a leak warning - the real fix should be to find a way to not
use a new QWidget like this. It seems odd that QGraphicsLayouts, which
don't use QWidget in any other way, should depend on QWidget like this.
Task-number: QTBUG-10768
Merge-request: 741
Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
(cherry picked from commit ea6a5146397b668bf535ee7249bd4262d6185234)
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/graphicsview/qgraphicsgridlayout.cpp | 7 | ||||
-rw-r--r-- | src/gui/graphicsview/qgraphicslinearlayout.cpp | 7 |
2 files changed, 6 insertions, 8 deletions
diff --git a/src/gui/graphicsview/qgraphicsgridlayout.cpp b/src/gui/graphicsview/qgraphicsgridlayout.cpp index 83db3ec..062b5ac 100644 --- a/src/gui/graphicsview/qgraphicsgridlayout.cpp +++ b/src/gui/graphicsview/qgraphicsgridlayout.cpp @@ -94,14 +94,13 @@ public: #endif }; +Q_GLOBAL_STATIC(QWidget, globalStyleInfoWidget); + QLayoutStyleInfo QGraphicsGridLayoutPrivate::styleInfo() const { - static QWidget *wid = 0; - if (!wid) - wid = new QWidget; QGraphicsItem *item = parentItem(); QStyle *style = (item && item->isWidget()) ? static_cast<QGraphicsWidget*>(item)->style() : QApplication::style(); - return QLayoutStyleInfo(style, wid); + return QLayoutStyleInfo(style, globalStyleInfoWidget()); } /*! diff --git a/src/gui/graphicsview/qgraphicslinearlayout.cpp b/src/gui/graphicsview/qgraphicslinearlayout.cpp index b828722..37408ef 100644 --- a/src/gui/graphicsview/qgraphicslinearlayout.cpp +++ b/src/gui/graphicsview/qgraphicslinearlayout.cpp @@ -171,14 +171,13 @@ int QGraphicsLinearLayoutPrivate::gridColumn(int index) const return int(qMin(uint(index), uint(engine.columnCount()))); } +Q_GLOBAL_STATIC(QWidget, globalStyleInfoWidget) + QLayoutStyleInfo QGraphicsLinearLayoutPrivate::styleInfo() const { - static QWidget *wid = 0; - if (!wid) - wid = new QWidget; QGraphicsItem *item = parentItem(); QStyle *style = (item && item->isWidget()) ? static_cast<QGraphicsWidget*>(item)->style() : QApplication::style(); - return QLayoutStyleInfo(style, wid); + return QLayoutStyleInfo(style, globalStyleInfoWidget()); } /*! |