Skip to content

Commit 2d4c8bf

Browse files
elpasonyalldawson
authored andcommittedNov 25, 2019
Fix time (and date) fields editing in forms
Fixes #33000 (cherry picked from commit 17a700b)
1 parent 023e8d2 commit 2d4c8bf

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed
 

‎src/gui/editorwidgets/qgsdatetimeeditwrapper.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,19 @@ void QgsDateTimeEditWrapper::updateValues( const QVariant &value, const QVariant
212212
return;
213213

214214
QDateTime dateTime;
215+
215216
switch ( field().type() )
216217
{
217218
case QVariant::DateTime:
219+
dateTime = value.toDateTime();
220+
break;
218221
case QVariant::Date:
222+
dateTime.setDate( value.toDate() );
223+
dateTime.setTime( QTime::currentTime() );
224+
break;
219225
case QVariant::Time:
220-
dateTime = value.toDateTime();
226+
dateTime.setDate( QDate::currentDate() );
227+
dateTime.setTime( value.toTime() );
221228
break;
222229
default:
223230
const bool fieldIsoFormat = config( QStringLiteral( "field_iso_format" ), false ).toBool();

‎tests/src/gui/testqgsdatetimeedit.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,14 @@ class TestQgsDateTimeEdit: public QObject
3232

3333
void nullValues();
3434
void focus();
35+
void testDateTime();
3536

3637
private:
3738
std::unique_ptr<QgsDateTimeEditWrapper> widget1; // For field 0
3839
std::unique_ptr<QgsDateTimeEditWrapper> widget2; // For field 1
3940
std::unique_ptr<QgsDateTimeEditWrapper> widget3; // For field 2
41+
std::unique_ptr<QgsDateTimeEditWrapper> widget4; // For field 3
42+
std::unique_ptr<QgsDateTimeEditWrapper> widget5; // For field 4
4043
std::unique_ptr<QgsVectorLayer> vl;
4144

4245
};
@@ -61,6 +64,8 @@ void TestQgsDateTimeEdit::init()
6164
fields.append( QgsField( "date1", QVariant::Date ) );
6265
fields.append( QgsField( "date2", QVariant::Date ) );
6366
fields.append( QgsField( "date3", QVariant::Date ) );
67+
fields.append( QgsField( "time", QVariant::Time ) );
68+
fields.append( QgsField( "datetime", QVariant::DateTime ) );
6469
vl->dataProvider()->addAttributes( fields );
6570
vl->updateFields();
6671
QVERIFY( vl.get() );
@@ -69,9 +74,13 @@ void TestQgsDateTimeEdit::init()
6974
widget1 = qgis::make_unique<QgsDateTimeEditWrapper>( vl.get(), 0, nullptr, nullptr );
7075
widget2 = qgis::make_unique<QgsDateTimeEditWrapper>( vl.get(), 1, nullptr, nullptr );
7176
widget3 = qgis::make_unique<QgsDateTimeEditWrapper>( vl.get(), 2, nullptr, nullptr );
77+
widget4 = qgis::make_unique<QgsDateTimeEditWrapper>( vl.get(), 3, nullptr, nullptr );
78+
widget5 = qgis::make_unique<QgsDateTimeEditWrapper>( vl.get(), 4, nullptr, nullptr );
7279
QVERIFY( widget1.get() );
7380
QVERIFY( widget2.get() );
7481
QVERIFY( widget3.get() );
82+
QVERIFY( widget4.get() );
83+
QVERIFY( widget5.get() );
7584
}
7685

7786
void TestQgsDateTimeEdit::cleanup()
@@ -226,5 +235,31 @@ void TestQgsDateTimeEdit::focus()
226235
QCOMPARE( dateedit3->text(), QStringLiteral( "nope" ) );
227236
}
228237

238+
void TestQgsDateTimeEdit::testDateTime()
239+
{
240+
QgsApplication::setNullRepresentation( QString( "nope" ) );
241+
QWidget *w = new QWidget(); //required for focus events
242+
QApplication::setActiveWindow( w );
243+
244+
QVariantMap cfg;
245+
cfg.insert( QStringLiteral( "AllowNull" ), true );
246+
247+
widget4->setConfig( cfg );
248+
QgsDateTimeEdit *dateedit4 = qobject_cast<QgsDateTimeEdit *>( widget4->createWidget( w ) );
249+
QVERIFY( dateedit4 );
250+
widget4->initWidget( dateedit4 );
251+
widget4->setValue( QTime( 23, 10, 57 ) );
252+
QTime value { widget4->value().toTime() };
253+
QCOMPARE( value, QTime( 23, 10, 57 ) );
254+
255+
widget5->setConfig( cfg );
256+
QgsDateTimeEdit *dateedit5 = qobject_cast<QgsDateTimeEdit *>( widget5->createWidget( w ) );
257+
QVERIFY( dateedit5 );
258+
widget5->initWidget( dateedit5 );
259+
widget5->setValue( QDate( 1966, 11, 25 ) );
260+
QDate value5 { widget5->value().toDate() };
261+
QCOMPARE( value5, QDate( 1966, 11, 25 ) );
262+
}
263+
229264
QGSTEST_MAIN( TestQgsDateTimeEdit )
230265
#include "testqgsdatetimeedit.moc"

0 commit comments

Comments
 (0)
Please sign in to comment.