Skip to content

Commit d4063e8

Browse files
committedFeb 12, 2018
Try to fix QgsCollapsibleGroupBox crash on Qt 5.10
Automatic memory management: prevent button to be deleted too early.
1 parent a7870af commit d4063e8

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed
 

‎src/gui/qgscollapsiblegroupbox.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,17 @@ void QgsCollapsibleGroupBoxBasic::init()
5858
mExpandIcon = QgsApplication::getThemeIcon( QStringLiteral( "/mIconExpand.svg" ) );
5959

6060
// collapse button
61-
mCollapseButton = new QgsGroupBoxCollapseButton( this );
61+
mCollapseButton = qgis::make_unique<QgsGroupBoxCollapseButton>( nullptr );
6262
mCollapseButton->setObjectName( QStringLiteral( "collapseButton" ) );
6363
mCollapseButton->setAutoRaise( true );
6464
mCollapseButton->setFixedSize( 16, 16 );
6565
// TODO set size (as well as margins) depending on theme, in updateStyle()
6666
mCollapseButton->setIconSize( QSize( 12, 12 ) );
6767
mCollapseButton->setIcon( mCollapseIcon );
68-
setFocusProxy( mCollapseButton );
68+
setFocusProxy( mCollapseButton.get() );
6969
setFocusPolicy( Qt::StrongFocus );
7070

71-
connect( mCollapseButton, &QAbstractButton::clicked, this, &QgsCollapsibleGroupBoxBasic::toggleCollapsed );
71+
connect( mCollapseButton.get(), &QAbstractButton::clicked, this, &QgsCollapsibleGroupBoxBasic::toggleCollapsed );
7272
connect( this, &QGroupBox::toggled, this, &QgsCollapsibleGroupBoxBasic::checkToggled );
7373
connect( this, &QGroupBox::clicked, this, &QgsCollapsibleGroupBoxBasic::checkClicked );
7474
}
@@ -221,7 +221,7 @@ void QgsCollapsibleGroupBoxBasic::toggleCollapsed()
221221
{
222222
// verify if sender is this group box's collapse button
223223
QgsGroupBoxCollapseButton *collBtn = qobject_cast<QgsGroupBoxCollapseButton *>( QObject::sender() );
224-
bool senderCollBtn = ( collBtn && collBtn == mCollapseButton );
224+
bool senderCollBtn = ( collBtn && collBtn == mCollapseButton.get() );
225225

226226
mAltDown = ( mAltDown || mCollapseButton->altDown() );
227227
mShiftDown = ( mShiftDown || mCollapseButton->shiftDown() );
@@ -426,7 +426,7 @@ void QgsCollapsibleGroupBoxBasic::setCollapsed( bool collapse )
426426
mParentScrollArea->ensureWidgetVisible( this );
427427
//and then make sure the top of the widget is visible - otherwise tall group boxes
428428
//scroll to their centres, which is disorienting for users
429-
mParentScrollArea->ensureWidgetVisible( mCollapseButton, 0, 5 );
429+
mParentScrollArea->ensureWidgetVisible( mCollapseButton.get(), 0, 5 );
430430
mParentScrollArea->setUpdatesEnabled( true );
431431
}
432432
// emit signal for connections using collapsed state
@@ -444,7 +444,7 @@ void QgsCollapsibleGroupBoxBasic::collapseExpandFixes()
444444
Q_FOREACH ( QObject *child, children() )
445445
{
446446
QWidget *w = qobject_cast<QWidget *>( child );
447-
if ( w && w != mCollapseButton )
447+
if ( w && w != mCollapseButton.get() )
448448
{
449449
w->setProperty( hideKey, true );
450450
w->hide();
@@ -456,7 +456,7 @@ void QgsCollapsibleGroupBoxBasic::collapseExpandFixes()
456456
Q_FOREACH ( QObject *child, children() )
457457
{
458458
QWidget *w = qobject_cast<QWidget *>( child );
459-
if ( w && w != mCollapseButton )
459+
if ( w && w != mCollapseButton.get() )
460460
{
461461
if ( w->property( hideKey ).toBool() )
462462
w->show();

‎src/gui/qgscollapsiblegroupbox.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ class GUI_EXPORT QgsCollapsibleGroupBoxBasic : public QGroupBox
157157
bool mScrollOnExpand;
158158
bool mShown;
159159
QScrollArea *mParentScrollArea = nullptr;
160-
QgsGroupBoxCollapseButton *mCollapseButton = nullptr;
160+
std::unique_ptr<QgsGroupBoxCollapseButton> mCollapseButton;
161161
QWidget *mSyncParent = nullptr;
162162
QString mSyncGroup;
163163
bool mAltDown;

0 commit comments

Comments
 (0)
Please sign in to comment.