[Digikam-devel] Fwd: extragear/graphics/digikam/libs/widgets/common

Gilles Caulier caulier.gilles at gmail.com
Fri Oct 2 14:39:46 BST 2009


With GDB, the backtrace must said parent=0x0. It's clear... else
pointer is a dumy valid.

Yes QPointer must reset parent addess to zero when parent widget is deleted...

Gilles

2009/10/2 Andi Clemens <andi.clemens at gmx.net>:
> Since we don't delete the pointer in the DCursorTracker, the error must have
> been an invalid access due to a nullpointer.
> But QPointer should help us here, too.
> If not, we might need to check in every method of DCursorTracker if the parent
> pointer is still valid.
> Right?
>
> Andi
>
>
> ---------- Message transféré ----------
> From: Andi Clemens <andi.clemens at gmx.net>
> To: kde-commits at kde.org
> Date: Fri, 02 Oct 2009 13:28:30 +0000
> Subject: extragear/graphics/digikam/libs/widgets/common
> SVN commit 1030535 by aclemens:
>
> I experienced a crash in DCursorTracker, I guess due to the fact that the
> parent widget was deleted before the DCursorTracker was destroyed.
> I was not able to reproduce it anymore, but as the Qt docs describe, it is
> always better to use a QPointer when saving pointers of other widgets inside a
> class. These pointers will keep track of all references and destroy themselves
> (set themselves to NULL) when all references are gone.
> This should avoid the crash I experienced in here.
>
>  M  +6 -5      dcursortracker.cpp
>
>
> --- trunk/extragear/graphics/digikam/libs/widgets/common/dcursortracker.cpp #1030534:1030535
> @@ -32,6 +32,7 @@
>  #include <QFrame>
>  #include <QLabel>
>  #include <QMouseEvent>
> +#include <QPointer>
>  #include <QTimer>
>  #include <QToolTip>
>
> @@ -55,11 +56,11 @@
>         parent        = 0;
>     }
>
> -    Qt::Alignment alignment;
> -    bool          enable;
> -    bool          keepOpen;
> -    QTimer*       autoHideTimer;
> -    QWidget*      parent;
> +    Qt::Alignment     alignment;
> +    bool              enable;
> +    bool              keepOpen;
> +    QTimer*           autoHideTimer;
> +    QPointer<QWidget> parent;
>  };
>
>  DCursorTracker::DCursorTracker(const QString& txt, QWidget *parent, Qt::Alignment align)
>
> _______________________________________________
> Digikam-devel mailing list
> Digikam-devel at kde.org
> https://mail.kde.org/mailman/listinfo/digikam-devel
>
>



More information about the Digikam-devel mailing list