diff --git a/Makefile.in b/Makefile.in
index 1057fb5cb6..9d3477d663 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -3526,7 +3526,8 @@ COND_TOOLKIT_QT_GUI_HDR = \
wx/qt/dvrenderers.h \
$(QT_PLATFORM_HDR) \
wx/qt/treectrl.h \
- wx/generic/paletteg.h
+ wx/generic/paletteg.h \
+ wx/qt/datectrl.h
@COND_TOOLKIT_QT@GUI_HDR = $(COND_TOOLKIT_QT_GUI_HDR)
@COND_TOOLKIT_COCOA@MEDIA_PLATFORM_HDR =
@COND_TOOLKIT_GTK@MEDIA_PLATFORM_HDR =
@@ -5342,7 +5343,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS = \
monodll_msw_bmpcbox.o \
monodll_msw_hyperlink.o \
monodll_msw_calctrl.o \
- monodll_datectrl.o \
+ monodll_msw_datectrl.o \
monodll_msw_datetimectrl.o \
monodll_timectrl.o \
monodll_datecontrols.o \
@@ -5529,7 +5530,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS = \
monodll_qt_window.o \
$(__QT_PLATFORM_SRC_OBJECTS) \
monodll_qt_treectrl.o \
- monodll_paletteg.o
+ monodll_paletteg.o \
+ monodll_qt_datectrl.o
@COND_TOOLKIT_QT@__GUI_SRC_OBJECTS = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS)
@COND_PLATFORM_UNIX_1@__QT_PLATFORM_SRC_OBJECTS = \
@COND_PLATFORM_UNIX_1@ monodll_unix_dialup.o monodll_unix_joystick.o \
@@ -7102,7 +7104,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_1 = \
monolib_msw_bmpcbox.o \
monolib_msw_hyperlink.o \
monolib_msw_calctrl.o \
- monolib_datectrl.o \
+ monolib_msw_datectrl.o \
monolib_msw_datetimectrl.o \
monolib_timectrl.o \
monolib_datecontrols.o \
@@ -7289,7 +7291,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_1 = \
monolib_qt_window.o \
$(__QT_PLATFORM_SRC_OBJECTS_1) \
monolib_qt_treectrl.o \
- monolib_paletteg.o
+ monolib_paletteg.o \
+ monolib_qt_datectrl.o
@COND_TOOLKIT_QT@__GUI_SRC_OBJECTS_1 = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS_1)
@COND_PLATFORM_UNIX_1@__QT_PLATFORM_SRC_OBJECTS_1 = \
@COND_PLATFORM_UNIX_1@ monolib_unix_dialup.o monolib_unix_joystick.o \
@@ -9014,7 +9017,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_2 = \
coredll_msw_bmpcbox.o \
coredll_msw_hyperlink.o \
coredll_msw_calctrl.o \
- coredll_datectrl.o \
+ coredll_msw_datectrl.o \
coredll_msw_datetimectrl.o \
coredll_timectrl.o \
coredll_datecontrols.o \
@@ -9201,7 +9204,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_2 = \
coredll_qt_window.o \
$(__QT_PLATFORM_SRC_OBJECTS_2) \
coredll_qt_treectrl.o \
- coredll_paletteg.o
+ coredll_paletteg.o \
+ coredll_qt_datectrl.o
@COND_TOOLKIT_QT@__GUI_SRC_OBJECTS_2 = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS_2)
@COND_PLATFORM_UNIX_1@__QT_PLATFORM_SRC_OBJECTS_2 = \
@COND_PLATFORM_UNIX_1@ coredll_unix_dialup.o coredll_unix_joystick.o \
@@ -10502,7 +10506,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_3 = \
corelib_msw_bmpcbox.o \
corelib_msw_hyperlink.o \
corelib_msw_calctrl.o \
- corelib_datectrl.o \
+ corelib_msw_datectrl.o \
corelib_msw_datetimectrl.o \
corelib_timectrl.o \
corelib_datecontrols.o \
@@ -10689,7 +10693,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_3 = \
corelib_qt_window.o \
$(__QT_PLATFORM_SRC_OBJECTS_3) \
corelib_qt_treectrl.o \
- corelib_paletteg.o
+ corelib_paletteg.o \
+ corelib_qt_datectrl.o
@COND_TOOLKIT_QT@__GUI_SRC_OBJECTS_3 = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS_3)
@COND_PLATFORM_UNIX_1@__QT_PLATFORM_SRC_OBJECTS_3 = \
@COND_PLATFORM_UNIX_1@ corelib_unix_dialup.o corelib_unix_joystick.o \
@@ -15300,7 +15305,7 @@ monodll_msw_hyperlink.o: $(srcdir)/src/msw/hyperlink.cpp $(MONODLL_ODEP)
monodll_msw_calctrl.o: $(srcdir)/src/msw/calctrl.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/calctrl.cpp
-monodll_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(MONODLL_ODEP)
+monodll_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/datectrl.cpp
monodll_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(MONODLL_ODEP)
@@ -15783,6 +15788,9 @@ monodll_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(MONODLL_ODEP)
monodll_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp
+monodll_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(MONODLL_ODEP)
+ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
+
monodll_mdig.o: $(srcdir)/src/generic/mdig.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp
@@ -20040,7 +20048,7 @@ monolib_msw_hyperlink.o: $(srcdir)/src/msw/hyperlink.cpp $(MONOLIB_ODEP)
monolib_msw_calctrl.o: $(srcdir)/src/msw/calctrl.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/calctrl.cpp
-monolib_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(MONOLIB_ODEP)
+monolib_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/datectrl.cpp
monolib_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(MONOLIB_ODEP)
@@ -20523,6 +20531,9 @@ monolib_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(MONOLIB_ODEP)
monolib_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp
+monolib_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(MONOLIB_ODEP)
+ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
+
monolib_mdig.o: $(srcdir)/src/generic/mdig.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp
@@ -25458,7 +25469,7 @@ coredll_msw_hyperlink.o: $(srcdir)/src/msw/hyperlink.cpp $(COREDLL_ODEP)
coredll_msw_calctrl.o: $(srcdir)/src/msw/calctrl.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/calctrl.cpp
-coredll_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(COREDLL_ODEP)
+coredll_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/datectrl.cpp
coredll_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(COREDLL_ODEP)
@@ -25941,6 +25952,9 @@ coredll_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(COREDLL_ODEP)
coredll_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp
+coredll_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(COREDLL_ODEP)
+ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
+
coredll_mdig.o: $(srcdir)/src/generic/mdig.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp
@@ -29172,7 +29186,7 @@ corelib_msw_hyperlink.o: $(srcdir)/src/msw/hyperlink.cpp $(CORELIB_ODEP)
corelib_msw_calctrl.o: $(srcdir)/src/msw/calctrl.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/calctrl.cpp
-corelib_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(CORELIB_ODEP)
+corelib_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/datectrl.cpp
corelib_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(CORELIB_ODEP)
@@ -29655,6 +29669,9 @@ corelib_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(CORELIB_ODEP)
corelib_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp
+corelib_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(CORELIB_ODEP)
+ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
+
corelib_mdig.o: $(srcdir)/src/generic/mdig.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp
diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl
index f235f19dd3..dfc67ee390 100644
--- a/build/bakefiles/files.bkl
+++ b/build/bakefiles/files.bkl
@@ -375,6 +375,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
$(QT_PLATFORM_HDR)
wx/qt/treectrl.h
wx/generic/paletteg.h
+ wx/qt/datectrl.h
@@ -473,6 +474,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
$(QT_PLATFORM_SRC)
src/qt/treectrl.cpp
src/generic/paletteg.cpp
+ src/qt/datectrl.cpp
diff --git a/build/cmake/files.cmake b/build/cmake/files.cmake
index 73f329b700..91edbe4260 100644
--- a/build/cmake/files.cmake
+++ b/build/cmake/files.cmake
@@ -288,6 +288,7 @@ set(QT_HDR
${QT_PLATFORM_HDR}
wx/qt/treectrl.h
wx/generic/paletteg.h
+ wx/qt/datectrl.h
)
set(QT_SRC
@@ -386,6 +387,7 @@ set(QT_SRC
${QT_PLATFORM_SRC}
src/qt/treectrl.cpp
src/generic/paletteg.cpp
+ src/qt/datectrl.cpp
)
set(MEDIA_QT_SRC
diff --git a/build/files b/build/files
index daccf35a45..e21f810cf6 100644
--- a/build/files
+++ b/build/files
@@ -258,6 +258,7 @@ QT_HDR =
wx/qt/dataobj.h
wx/qt/dataobj2.h
wx/qt/dataview.h
+ wx/qt/datectrl.h
wx/qt/dc.h
wx/qt/dcclient.h
wx/qt/dcmemory.h
@@ -348,6 +349,7 @@ QT_SRC=
src/qt/cursor.cpp
src/qt/dataobj.cpp
src/qt/dataview.cpp
+ src/qt/datectrl.cpp
src/qt/dc.cpp
src/qt/dcclient.cpp
src/qt/dcmemory.cpp
diff --git a/include/wx/datectrl.h b/include/wx/datectrl.h
index 9734cb023d..da11f8e0a0 100644
--- a/include/wx/datectrl.h
+++ b/include/wx/datectrl.h
@@ -89,6 +89,10 @@ typedef wxDatePickerCtrlCommonBase wxDatePickerCtrlBase;
#elif defined(__WXOSX_COCOA__) && !defined(__WXUNIVERSAL__)
#include "wx/osx/datectrl.h"
+ #define wxHAS_NATIVE_DATEPICKCTRL
+#elif defined(__WXQT__) && !defined(__WXUNIVERSAL__)
+ #include "wx/qt/datectrl.h"
+
#define wxHAS_NATIVE_DATEPICKCTRL
#else
#include "wx/generic/datectrl.h"
diff --git a/include/wx/qt/datectrl.h b/include/wx/qt/datectrl.h
new file mode 100644
index 0000000000..75e0f52ecf
--- /dev/null
+++ b/include/wx/qt/datectrl.h
@@ -0,0 +1,64 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name: wx/qt/datectrl.h
+// Purpose: wxDatePickerCtrl for Qt
+// Author: Ali Kettab
+// Modified by:
+// Created: 2023-10-12
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_QT_DATECTRL_H_
+#define _WX_QT_DATECTRL_H_
+
+class QDateEdit;
+
+// ----------------------------------------------------------------------------
+// wxDatePickerCtrl
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_ADV wxDatePickerCtrl : public wxDatePickerCtrlBase
+{
+public:
+ // ctors
+ wxDatePickerCtrl() { }
+
+ wxDatePickerCtrl(wxWindow *parent,
+ wxWindowID id,
+ const wxDateTime& dt = wxDefaultDateTime,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = wxDP_DEFAULT | wxDP_SHOWCENTURY,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxDatePickerCtrlNameStr)
+ {
+ Create(parent, id, dt, pos, size, style, validator, name);
+ }
+
+ bool Create(wxWindow *parent,
+ wxWindowID id,
+ const wxDateTime& dt = wxDefaultDateTime,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = wxDP_DEFAULT | wxDP_SHOWCENTURY,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxDatePickerCtrlNameStr);
+
+ // Override this one to add date-specific (and time-ignoring) checks.
+ virtual void SetValue(const wxDateTime& dt) override;
+ virtual wxDateTime GetValue() const override;
+
+ // Implement the base class pure virtuals.
+ virtual void SetRange(const wxDateTime& dt1, const wxDateTime& dt2) override;
+ virtual bool GetRange(wxDateTime *dt1, wxDateTime *dt2) const override;
+
+ virtual QWidget *GetHandle() const override;
+
+protected:
+
+private:
+ QDateEdit* m_qtDateEdit;
+
+ wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDatePickerCtrl);
+};
+
+#endif // _WX_QT_DATECTRL_H_
diff --git a/src/qt/datectrl.cpp b/src/qt/datectrl.cpp
new file mode 100644
index 0000000000..ea26fd45fe
--- /dev/null
+++ b/src/qt/datectrl.cpp
@@ -0,0 +1,127 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name: src/qt/datectrl.cpp
+// Purpose: wxDatePickerCtrl implementation
+// Author: Ali Kettab
+// Modified by:
+// Created: 2023-10-12
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/wxprec.h"
+
+
+#if wxUSE_DATEPICKCTRL
+
+#include "wx/datectrl.h"
+#include "wx/dateevt.h"
+#include "wx/qt/private/converter.h"
+#include "wx/qt/private/winevent.h"
+
+#include
+
+wxIMPLEMENT_DYNAMIC_CLASS(wxDatePickerCtrl, wxControl);
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+class wxQtDateEdit : public wxQtEventSignalHandler< QDateEdit, wxDatePickerCtrl >
+{
+public:
+ wxQtDateEdit( wxWindow* parent, wxDatePickerCtrl* handler );
+
+private:
+ void dateChanged(const QDate& date);
+
+};
+
+wxQtDateEdit::wxQtDateEdit( wxWindow* parent, wxDatePickerCtrl* handler )
+ : wxQtEventSignalHandler< QDateEdit, wxDatePickerCtrl >( parent, handler )
+{
+ connect(this, &QDateTimeEdit::dateChanged,
+ this, &wxQtDateEdit::dateChanged);
+}
+
+void wxQtDateEdit::dateChanged(const QDate& date)
+{
+ wxDateEvent event(GetHandler(), wxQtConvertDate(date), wxEVT_DATE_CHANGED);
+ EmitEvent( event );
+}
+
+// ----------------------------------------------------------------------------
+// wxDatePickerCtrl creation
+// ----------------------------------------------------------------------------
+
+bool
+wxDatePickerCtrl::Create(wxWindow *parent,
+ wxWindowID id,
+ const wxDateTime& dt,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ const wxValidator& validator,
+ const wxString& name)
+{
+ m_qtDateEdit = new wxQtDateEdit( parent, this );
+ m_qtDateEdit->setDate( dt.IsValid() ? wxQtConvertDate(dt) :
+ wxQtConvertDate(wxDateTime::Today()) );
+ m_qtDateEdit->setCalendarPopup(style & wxDP_DROPDOWN);
+ m_qtDateEdit->setDisplayFormat(QLocale::system().dateFormat(QLocale::ShortFormat));
+
+ return QtCreateControl( parent, id, pos, size, style, validator, name );
+}
+
+// ----------------------------------------------------------------------------
+// wxDatePickerCtrl operations
+// ----------------------------------------------------------------------------
+
+void wxDatePickerCtrl::SetValue(const wxDateTime& dt)
+{
+ wxASSERT_MSG( dt.IsValid() || HasFlag(wxDP_ALLOWNONE),
+ "this control must have a valid date" );
+
+ const auto qtDate = wxQtConvertDate(dt);
+
+ if ( qtDate >= m_qtDateEdit->minimumDate() &&
+ qtDate <= m_qtDateEdit->maximumDate() )
+ {
+ wxQtEnsureSignalsBlocked blocker(m_qtDateEdit);
+ m_qtDateEdit->setDate( qtDate );
+ }
+}
+
+wxDateTime wxDatePickerCtrl::GetValue() const
+{
+ return wxQtConvertDate( m_qtDateEdit->date() );
+}
+
+void wxDatePickerCtrl::SetRange(const wxDateTime& dt1, const wxDateTime& dt2)
+{
+ m_qtDateEdit->setDateRange( wxQtConvertDate(dt1), wxQtConvertDate(dt2) );
+}
+
+bool wxDatePickerCtrl::GetRange(wxDateTime *dt1, wxDateTime *dt2) const
+{
+ if ( dt1 )
+ *dt1 = wxQtConvertDate( m_qtDateEdit->minimumDate() );
+
+ if ( dt2 )
+ *dt2 = wxQtConvertDate( m_qtDateEdit->maximumDate() );
+
+ return true;
+}
+
+QWidget* wxDatePickerCtrl::GetHandle() const
+{
+ return m_qtDateEdit;
+}
+
+#endif // wxUSE_DATEPICKCTRL