Skip to content

Commit d8cc285

Browse files
committed
fix NULL constraint on date/time widget with allow NULL
the issue was that widget wrapper was using parent QDateTimeEdit::dateTimeChanged signal. It was connected both internally to QgsDateTimeEdit::changed and in the form to detect changes. When QgsAttributeForm was recreating the updated feature it was calling QgsDateTimeEdit::value() before changed() could update the value (i.e. setting mIsNull to false). fix #17790
1 parent df95536 commit d8cc285

File tree

4 files changed

+9
-6
lines changed

4 files changed

+9
-6
lines changed

python/gui/editorwidgets/qgsdatetimeedit.sip

+3
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ Resets the widget to show no value (ie, an "unknown" state).
6565
.. versionadded:: 2.16
6666
%End
6767

68+
signals:
69+
void dateTimeChanged( const QDateTime &date );
70+
6871
protected:
6972
virtual void mousePressEvent( QMouseEvent *event );
7073

src/gui/editorwidgets/qgsdatetimeedit.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,6 @@ void QgsDateTimeEdit::clear()
6161
displayNull();
6262

6363
changed( QDateTime() );
64-
65-
// avoid slot double activation
66-
disconnect( this, &QDateTimeEdit::dateTimeChanged, this, &QgsDateTimeEdit::changed );
67-
emit dateTimeChanged( QDateTime() );
68-
connect( this, &QDateTimeEdit::dateTimeChanged, this, &QgsDateTimeEdit::changed );
6964
}
7065
}
7166

@@ -174,6 +169,8 @@ void QgsDateTimeEdit::changed( const QDateTime &dateTime )
174169
}
175170

176171
mClearAction->setVisible( mAllowNull && !mIsNull );
172+
173+
emit QgsDateTimeEdit::dateTimeChanged( dateTime );
177174
}
178175

179176
void QgsDateTimeEdit::displayNull( bool updateCalendar )

src/gui/editorwidgets/qgsdatetimeedit.h

+3
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ class GUI_EXPORT QgsDateTimeEdit : public QDateTimeEdit
6262
*/
6363
void setEmpty();
6464

65+
signals:
66+
void dateTimeChanged( const QDateTime &date );
67+
6568
protected:
6669
void mousePressEvent( QMouseEvent *event ) override;
6770
void focusOutEvent( QFocusEvent *event ) override;

src/gui/editorwidgets/qgsdatetimeeditwrapper.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ void QgsDateTimeEditWrapper::initWidget( QWidget *editor )
9393

9494
if ( mQgsDateTimeEdit )
9595
{
96-
connect( mQgsDateTimeEdit, &QDateTimeEdit::dateTimeChanged, this, &QgsDateTimeEditWrapper::dateTimeChanged );
96+
connect( mQgsDateTimeEdit, &QgsDateTimeEdit::dateTimeChanged, this, &QgsDateTimeEditWrapper::dateTimeChanged );
9797
}
9898
else
9999
{

0 commit comments

Comments
 (0)