Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qdatetime.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// Copyright (C) 2021 Intel Corporation.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5#ifndef QDATETIME_H
6#define QDATETIME_H
7
8#include <QtCore/qcalendar.h>
9#include <QtCore/qcompare.h>
10#include <QtCore/qlocale.h>
11#include <QtCore/qnamespace.h>
12#include <QtCore/qshareddata.h>
13#include <QtCore/qstring.h>
14
15#include <climits>
16#include <chrono>
17
18#if defined(Q_OS_DARWIN) || defined(Q_QDOC)
19Q_FORWARD_DECLARE_CF_TYPE(CFDate);
20Q_FORWARD_DECLARE_OBJC_CLASS(NSDate);
21#endif
22
23QT_BEGIN_NAMESPACE
24
25class QTimeZone;
26class QDateTime;
27
28class Q_CORE_EXPORT QDate
29{
30 explicit constexpr QDate(qint64 julianDay) : jd(julianDay) {}
31public:
32 using difference_type = qint64;
33
34 constexpr QDate() : jd(nullJd()) {}
35 QDate(int y, int m, int d);
36 QDate(int y, int m, int d, QCalendar cal);
37// INTEGRITY incident-85878 (timezone and clock_cast are not supported)
38#if (__cpp_lib_chrono >= 201907L && !defined(Q_OS_INTEGRITY)) || defined(Q_QDOC)
39 QT_POST_CXX17_API_IN_EXPORTED_CLASS
40 Q_IMPLICIT constexpr QDate(std::chrono::year_month_day date) noexcept
41 : jd(date.ok() ? stdSysDaysToJulianDay(date) : nullJd())
42 {}
43
44 QT_POST_CXX17_API_IN_EXPORTED_CLASS
45 Q_IMPLICIT constexpr QDate(std::chrono::year_month_day_last date) noexcept
46 : jd(date.ok() ? stdSysDaysToJulianDay(date) : nullJd())
47 {}
48
49 QT_POST_CXX17_API_IN_EXPORTED_CLASS
50 Q_IMPLICIT constexpr QDate(std::chrono::year_month_weekday date) noexcept
51 : jd(date.ok() ? stdSysDaysToJulianDay(date) : nullJd())
52 {}
53
54 QT_POST_CXX17_API_IN_EXPORTED_CLASS
55 Q_IMPLICIT constexpr QDate(std::chrono::year_month_weekday_last date) noexcept
56 : jd(date.ok() ? stdSysDaysToJulianDay(date) : nullJd())
57 {}
58
59 QT_POST_CXX17_API_IN_EXPORTED_CLASS
60 static constexpr QDate fromStdSysDays(const std::chrono::sys_days &days) noexcept
61 {
62 return QDate(stdSysDaysToJulianDay(days));
63 }
64
65 QT_POST_CXX17_API_IN_EXPORTED_CLASS
66 constexpr std::chrono::sys_days toStdSysDays() const noexcept
67 {
68 const qint64 days = isValid() ? jd - unixEpochJd() : 0;
69 return std::chrono::sys_days(std::chrono::days(days));
70 }
71#endif
72
73 constexpr bool isNull() const { return !isValid(); }
74 constexpr bool isValid() const { return jd >= minJd() && jd <= maxJd(); }
75
76 // Gregorian-optimized:
77 int year() const;
78 int month() const;
79 int day() const;
80 int dayOfWeek() const;
81 int dayOfYear() const;
82 int daysInMonth() const;
83 int daysInYear() const;
84 int weekNumber(int *yearNum = nullptr) const; // ISO 8601, always Gregorian
85
86 int year(QCalendar cal) const;
87 int month(QCalendar cal) const;
88 int day(QCalendar cal) const;
89 int dayOfWeek(QCalendar cal) const;
90 int dayOfYear(QCalendar cal) const;
91 int daysInMonth(QCalendar cal) const;
92 int daysInYear(QCalendar cal) const;
93
94#if QT_DEPRECATED_SINCE(6, 9)
95 QT_DEPRECATED_VERSION_X_6_9("Pass QTimeZone instead")
96 QDateTime startOfDay(Qt::TimeSpec spec, int offsetSeconds = 0) const;
97 QT_DEPRECATED_VERSION_X_6_9("Pass QTimeZone instead")
98 QDateTime endOfDay(Qt::TimeSpec spec, int offsetSeconds = 0) const;
99#endif
100
101 QDateTime startOfDay(const QTimeZone &zone) const;
102 QDateTime endOfDay(const QTimeZone &zone) const;
103 QDateTime startOfDay() const;
104 QDateTime endOfDay() const;
105
106#if QT_CONFIG(datestring)
107 QString toString(Qt::DateFormat format = Qt::TextDate) const;
108 QString toString(const QString &format) const;
109 QString toString(const QString &format, QCalendar cal) const
110 { return toString(qToStringViewIgnoringNull(format), cal); }
111 QString toString(QStringView format) const;
112 QString toString(QStringView format, QCalendar cal) const;
113#endif
114 bool setDate(int year, int month, int day); // Gregorian-optimized
115 bool setDate(int year, int month, int day, QCalendar cal);
116
117 void getDate(int *year, int *month, int *day) const;
118
119 [[nodiscard]] QDate addDays(qint64 days) const;
120// INTEGRITY incident-85878 (timezone and clock_cast are not supported)
121#if (__cpp_lib_chrono >= 201907L && !defined(Q_OS_INTEGRITY)) || defined(Q_QDOC)
122 QT_POST_CXX17_API_IN_EXPORTED_CLASS
123 [[nodiscard]] QDate addDuration(std::chrono::days days) const
124 {
125 return addDays(days.count());
126 }
127#endif
128 // Gregorian-optimized:
129 [[nodiscard]] QDate addMonths(int months) const;
130 [[nodiscard]] QDate addYears(int years) const;
131 [[nodiscard]] QDate addMonths(int months, QCalendar cal) const;
132 [[nodiscard]] QDate addYears(int years, QCalendar cal) const;
133 qint64 daysTo(QDate d) const;
134
135 static QDate currentDate();
136#if QT_CONFIG(datestring)
137 // No DateFormat accepts a two-digit year, so no need for baseYear:
138 static QDate fromString(QStringView string, Qt::DateFormat format = Qt::TextDate);
139 static QDate fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
140 { return fromString(qToStringViewIgnoringNull(string), format); }
141
142 // Accept calendar without over-ride of base year:
143 static QDate fromString(QStringView string, QStringView format, QCalendar cal)
144 { return fromString(string.toString(), format, QLocale::DefaultTwoDigitBaseYear, cal); }
145 QT_CORE_INLINE_SINCE(6, 7)
146 static QDate fromString(const QString &string, QStringView format, QCalendar cal);
147 static QDate fromString(const QString &string, const QString &format, QCalendar cal)
148 { return fromString(string, qToStringViewIgnoringNull(format), QLocale::DefaultTwoDigitBaseYear, cal); }
149
150 // Overriding base year is likely more common than overriding calendar (and
151 // likely to get more so, as the legacy base drops ever further behind us).
152 static QDate fromString(QStringView string, QStringView format,
153 int baseYear = QLocale::DefaultTwoDigitBaseYear)
154 { return fromString(string.toString(), format, baseYear); }
155 static QDate fromString(QStringView string, QStringView format,
156 int baseYear, QCalendar cal)
157 { return fromString(string.toString(), format, baseYear, cal); }
158 static QDate fromString(const QString &string, QStringView format,
159 int baseYear = QLocale::DefaultTwoDigitBaseYear);
160 static QDate fromString(const QString &string, QStringView format,
161 int baseYear, QCalendar cal);
162 static QDate fromString(const QString &string, const QString &format,
163 int baseYear = QLocale::DefaultTwoDigitBaseYear)
164 { return fromString(string, qToStringViewIgnoringNull(format), baseYear); }
165 static QDate fromString(const QString &string, const QString &format,
166 int baseYear, QCalendar cal)
167 { return fromString(string, qToStringViewIgnoringNull(format), baseYear, cal); }
168#endif
169 static bool isValid(int y, int m, int d);
170 static bool isLeapYear(int year);
171
172 static constexpr inline QDate fromJulianDay(qint64 jd_)
173 { return jd_ >= minJd() && jd_ <= maxJd() ? QDate(jd_) : QDate() ; }
174 constexpr inline qint64 toJulianDay() const { return jd; }
175
176private:
177 // using extra parentheses around min to avoid expanding it if it is a macro
178 static constexpr inline qint64 nullJd() { return (std::numeric_limits<qint64>::min)(); }
179 static constexpr inline qint64 minJd() { return Q_INT64_C(-784350574879); }
180 static constexpr inline qint64 maxJd() { return Q_INT64_C( 784354017364); }
181 static constexpr inline qint64 unixEpochJd() { return Q_INT64_C(2440588); }
182
183// INTEGRITY incident-85878 (timezone and clock_cast are not supported)
184#if __cpp_lib_chrono >= 201907L && !defined(Q_OS_INTEGRITY)
185#if !QT_CORE_REMOVED_SINCE(6, 7)
186 QT_POST_CXX17_API_IN_EXPORTED_CLASS
187#endif
188 static constexpr qint64
189 stdSysDaysToJulianDay(const std::chrono::sys_days &days) noexcept
190 {
191 const auto epochDays = days.time_since_epoch().count();
192 // minJd() and maxJd() fit into 40 bits.
193 if constexpr (sizeof(epochDays) * CHAR_BIT >= 41) {
194 constexpr auto top = maxJd() - unixEpochJd();
195 constexpr auto bottom = minJd() - unixEpochJd();
196 if (epochDays > top || epochDays < bottom)
197 return nullJd();
198 }
199 return unixEpochJd() + epochDays;
200 }
201#endif // __cpp_lib_chrono >= 201907L
202
203 qint64 jd;
204
205 friend class QDateTime;
206 friend class QDateTimeParser;
207 friend class QDateTimePrivate;
208
209 friend constexpr bool comparesEqual(const QDate &lhs, const QDate &rhs) noexcept
210 { return lhs.jd == rhs.jd; }
211 friend constexpr Qt::strong_ordering
212 compareThreeWay(const QDate &lhs, const QDate &rhs) noexcept
213 { return Qt::compareThreeWay(lhs.jd, rhs.jd); }
214 Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QDate)
215
216 friend inline QDate &operator++(QDate &date) noexcept
217 {
218 date = date.addDays(1);
219 return date;
220 }
221
222 friend inline QDate &operator--(QDate &date) noexcept
223 {
224 date = date.addDays(-1);
225 return date;
226 }
227
228 friend inline QDate operator++(QDate &date, int) noexcept
229 {
230 QDate old = date;
231 ++date;
232 return old;
233 }
234
235 friend inline QDate operator--(QDate &date, int) noexcept
236 {
237 QDate old = date;
238 --date;
239 return old;
240 }
241
242#ifndef QT_NO_DATASTREAM
243 friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, QDate);
244 friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QDate &);
245#endif
246};
247Q_DECLARE_TYPEINFO(QDate, Q_RELOCATABLE_TYPE);
248
249class Q_CORE_EXPORT QTime
250{
251 explicit constexpr QTime(int ms) : mds(ms)
252 {}
253public:
254 constexpr QTime(): mds(NullTime)
255 {}
256 QTime(int h, int m, int s = 0, int ms = 0);
257
258 constexpr bool isNull() const { return mds == NullTime; }
259 bool isValid() const;
260
261 int hour() const;
262 int minute() const;
263 int second() const;
264 int msec() const;
265#if QT_CONFIG(datestring)
266 QString toString(Qt::DateFormat f = Qt::TextDate) const;
267 QString toString(const QString &format) const
268 { return toString(qToStringViewIgnoringNull(format)); }
269 QString toString(QStringView format) const;
270#endif
271 bool setHMS(int h, int m, int s, int ms = 0);
272
273 [[nodiscard]] QTime addSecs(int secs) const;
274 int secsTo(QTime t) const;
275 [[nodiscard]] QTime addMSecs(int ms) const;
276 int msecsTo(QTime t) const;
277
278 static constexpr inline QTime fromMSecsSinceStartOfDay(int msecs) { return QTime(msecs); }
279 constexpr inline int msecsSinceStartOfDay() const { return mds == NullTime ? 0 : mds; }
280
281 static QTime currentTime();
282#if QT_CONFIG(datestring)
283 static QTime fromString(QStringView string, Qt::DateFormat format = Qt::TextDate);
284 static QTime fromString(QStringView string, QStringView format)
285 { return fromString(string.toString(), format); }
286 static QTime fromString(const QString &string, QStringView format);
287 static QTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
288 { return fromString(qToStringViewIgnoringNull(string), format); }
289 static QTime fromString(const QString &string, const QString &format)
290 { return fromString(string, qToStringViewIgnoringNull(format)); }
291#endif
292 static bool isValid(int h, int m, int s, int ms = 0);
293
294private:
295 enum TimeFlag { NullTime = -1 };
296 constexpr inline int ds() const { return mds == -1 ? 0 : mds; }
297 int mds;
298
299 friend constexpr bool comparesEqual(const QTime &lhs, const QTime &rhs) noexcept
300 { return lhs.mds == rhs.mds; }
301 friend constexpr Qt::strong_ordering
302 compareThreeWay(const QTime &lhs, const QTime &rhs) noexcept
303 { return Qt::compareThreeWay(lhs.mds, rhs.mds); }
304 Q_DECLARE_STRONGLY_ORDERED_LITERAL_TYPE(QTime)
305
306 friend class QDateTime;
307 friend class QDateTimePrivate;
308#ifndef QT_NO_DATASTREAM
309 friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, QTime);
310 friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QTime &);
311#endif
312};
313Q_DECLARE_TYPEINFO(QTime, Q_RELOCATABLE_TYPE);
314
315class QDateTimePrivate;
316
317class Q_CORE_EXPORT QDateTime
318{
319 struct ShortData {
320#if QT_VERSION >= QT_VERSION_CHECK(7,0,0) || defined(QT_BOOTSTRAPPED)
321# if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
322 qint64 status : 8;
323# endif
324 qint64 msecs : 56;
325
326# if Q_BYTE_ORDER == Q_BIG_ENDIAN
327 qint64 status : 8;
328# endif
329#else
330# if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
331 quintptr status : 8;
332# endif
333 // note: this is only 24 bits on 32-bit systems...
334 qintptr msecs : sizeof(void *) * 8 - 8;
335
336# if Q_BYTE_ORDER == Q_BIG_ENDIAN
337 quintptr status : 8;
338# endif
339#endif
340 friend constexpr bool operator==(ShortData lhs, ShortData rhs)
341 { return lhs.status == rhs.status && lhs.msecs == rhs.msecs; }
342 };
343
344 union Data {
345 // To be of any use, we need at least 60 years around 1970, which
346 // is 1,893,456,000,000 ms. That requires 41 bits to store, plus
347 // the sign bit. With the status byte, the minimum size is 50 bits.
348 static constexpr bool CanBeSmall = sizeof(ShortData) * 8 > 50;
349
350 Data() noexcept;
351 Data(const QTimeZone &);
352 Data(const Data &other) noexcept;
353 Data(Data &&other) noexcept;
354 Data &operator=(const Data &other) noexcept;
355 Data &operator=(Data &&other) noexcept { swap(other); return *this; }
356 ~Data();
357
358 void swap(Data &other) noexcept
359 { std::swap(data, other.data); }
360
361 bool isShort() const;
362 inline void invalidate();
363 void detach();
364 QTimeZone timeZone() const;
365
366 const QDateTimePrivate *operator->() const;
367 QDateTimePrivate *operator->();
368
369 QDateTimePrivate *d;
370 ShortData data;
371 };
372
373public:
374 QDateTime() noexcept;
375
376 enum class TransitionResolution {
377 Reject = 0,
378 RelativeToBefore,
379 RelativeToAfter,
380 PreferBefore,
381 PreferAfter,
382 PreferStandard,
383 PreferDaylightSaving,
384 // Closest match to behavior prior to introducing TransitionResolution:
385 LegacyBehavior = RelativeToBefore
386 };
387
388#if QT_DEPRECATED_SINCE(6, 9)
389 QT_DEPRECATED_VERSION_X_6_9("Pass QTimeZone instead")
390 QDateTime(QDate date, QTime time, Qt::TimeSpec spec, int offsetSeconds = 0);
391#endif
392#if QT_CORE_REMOVED_SINCE(6, 7)
393 QDateTime(QDate date, QTime time, const QTimeZone &timeZone);
394 QDateTime(QDate date, QTime time);
395#endif
396 QDateTime(QDate date, QTime time, const QTimeZone &timeZone,
397 TransitionResolution resolve = TransitionResolution::LegacyBehavior);
398 QDateTime(QDate date, QTime time,
399 TransitionResolution resolve = TransitionResolution::LegacyBehavior);
400 QDateTime(const QDateTime &other) noexcept;
401 QDateTime(QDateTime &&other) noexcept;
402 ~QDateTime();
403
404 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QDateTime)
405 QDateTime &operator=(const QDateTime &other) noexcept;
406
407 void swap(QDateTime &other) noexcept { d.swap(other.d); }
408
409 bool isNull() const;
410 bool isValid() const;
411
412 QDate date() const;
413 QTime time() const;
414 Qt::TimeSpec timeSpec() const;
415 int offsetFromUtc() const;
416 QTimeZone timeRepresentation() const;
417#if QT_CONFIG(timezone)
418 QTimeZone timeZone() const;
419#endif // timezone
420 QString timeZoneAbbreviation() const;
421 bool isDaylightTime() const;
422
423 qint64 toMSecsSinceEpoch() const;
424 qint64 toSecsSinceEpoch() const;
425
426#if QT_CORE_REMOVED_SINCE(6, 7)
427 void setDate(QDate date);
428 void setTime(QTime time);
429#endif
430 void setDate(QDate date, TransitionResolution resolve = TransitionResolution::LegacyBehavior);
431 void setTime(QTime time, TransitionResolution resolve = TransitionResolution::LegacyBehavior);
432
433#if QT_DEPRECATED_SINCE(6, 9)
434 QT_DEPRECATED_VERSION_X_6_9("Use setTimeZone() instead")
435 void setTimeSpec(Qt::TimeSpec spec);
436 QT_DEPRECATED_VERSION_X_6_9("Use setTimeZone() instead")
437 void setOffsetFromUtc(int offsetSeconds);
438#endif
439#if QT_CORE_REMOVED_SINCE(6, 7)
440 void setTimeZone(const QTimeZone &toZone);
441#endif
442 void setTimeZone(const QTimeZone &toZone,
443 TransitionResolution resolve = TransitionResolution::LegacyBehavior);
444 void setMSecsSinceEpoch(qint64 msecs);
445 void setSecsSinceEpoch(qint64 secs);
446
447#if QT_CONFIG(datestring)
448 QString toString(Qt::DateFormat format = Qt::TextDate) const;
449 QString toString(const QString &format) const;
450 QString toString(const QString &format, QCalendar cal) const
451 { return toString(qToStringViewIgnoringNull(format), cal); }
452 QString toString(QStringView format) const;
453 QString toString(QStringView format, QCalendar cal) const;
454#endif
455 [[nodiscard]] QDateTime addDays(qint64 days) const;
456 [[nodiscard]] QDateTime addMonths(int months) const;
457 [[nodiscard]] QDateTime addYears(int years) const;
458 [[nodiscard]] QDateTime addSecs(qint64 secs) const;
459 [[nodiscard]] QDateTime addMSecs(qint64 msecs) const;
460 [[nodiscard]] QDateTime addDuration(std::chrono::milliseconds msecs) const
461 {
462 return addMSecs(msecs.count());
463 }
464
465#if QT_DEPRECATED_SINCE(6, 9)
466 QT_DEPRECATED_VERSION_X_6_9("Use toTimeZone instead")
467 QDateTime toTimeSpec(Qt::TimeSpec spec) const;
468#endif
469 QDateTime toLocalTime() const;
470 QDateTime toUTC() const;
471 QDateTime toOffsetFromUtc(int offsetSeconds) const;
472 QDateTime toTimeZone(const QTimeZone &toZone) const;
473
474 qint64 daysTo(const QDateTime &) const;
475 qint64 secsTo(const QDateTime &) const;
476 qint64 msecsTo(const QDateTime &) const;
477
478 static QDateTime currentDateTime(const QTimeZone &zone);
479 static QDateTime currentDateTime();
480 static QDateTime currentDateTimeUtc();
481#if QT_CONFIG(datestring)
482 // No DateFormat accepts a two-digit year, so no need for baseYear:
483 static QDateTime fromString(QStringView string, Qt::DateFormat format = Qt::TextDate);
484 static QDateTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
485 { return fromString(qToStringViewIgnoringNull(string), format); }
486
487 // Accept calendar without over-ride of base year:
488 static QDateTime fromString(QStringView string, QStringView format, QCalendar cal)
489 { return fromString(string.toString(), format, QLocale::DefaultTwoDigitBaseYear, cal); }
490 QT_CORE_INLINE_SINCE(6, 7)
491 static QDateTime fromString(const QString &string, QStringView format, QCalendar cal);
492 static QDateTime fromString(const QString &string, const QString &format, QCalendar cal)
493 { return fromString(string, qToStringViewIgnoringNull(format), QLocale::DefaultTwoDigitBaseYear, cal); }
494
495 // Overriding base year is likely more common than overriding calendar (and
496 // likely to get more so, as the legacy base drops ever further behind us).
497 static QDateTime fromString(QStringView string, QStringView format,
498 int baseYear = QLocale::DefaultTwoDigitBaseYear)
499 { return fromString(string.toString(), format, baseYear); }
500 static QDateTime fromString(QStringView string, QStringView format,
501 int baseYear, QCalendar cal)
502 { return fromString(string.toString(), format, baseYear, cal); }
503 static QDateTime fromString(const QString &string, QStringView format,
504 int baseYear = QLocale::DefaultTwoDigitBaseYear);
505 static QDateTime fromString(const QString &string, QStringView format,
506 int baseYear, QCalendar cal);
507 static QDateTime fromString(const QString &string, const QString &format,
508 int baseYear = QLocale::DefaultTwoDigitBaseYear)
509 { return fromString(string, qToStringViewIgnoringNull(format), baseYear); }
510 static QDateTime fromString(const QString &string, const QString &format,
511 int baseYear, QCalendar cal)
512 { return fromString(string, qToStringViewIgnoringNull(format), baseYear, cal); }
513#endif
514
515#if QT_DEPRECATED_SINCE(6, 9)
516 QT_DEPRECATED_VERSION_X_6_9("Pass QTimeZone instead of time-spec, offset")
517 static QDateTime fromMSecsSinceEpoch(qint64 msecs, Qt::TimeSpec spec, int offsetFromUtc = 0);
518 QT_DEPRECATED_VERSION_X_6_9("Pass QTimeZone instead of time-spec, offset")
519 static QDateTime fromSecsSinceEpoch(qint64 secs, Qt::TimeSpec spec, int offsetFromUtc = 0);
520#endif
521
522 static QDateTime fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone);
523 static QDateTime fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone);
524 static QDateTime fromMSecsSinceEpoch(qint64 msecs);
525 static QDateTime fromSecsSinceEpoch(qint64 secs);
526
527 static qint64 currentMSecsSinceEpoch() noexcept;
528 static qint64 currentSecsSinceEpoch() noexcept;
529
530#if defined(Q_OS_DARWIN) || defined(Q_QDOC)
531 static QDateTime fromCFDate(CFDateRef date);
532 CFDateRef toCFDate() const Q_DECL_CF_RETURNS_RETAINED;
533 static QDateTime fromNSDate(const NSDate *date);
534 NSDate *toNSDate() const Q_DECL_NS_RETURNS_AUTORELEASED;
535#endif
536
537 static QDateTime fromStdTimePoint(
538 std::chrono::time_point<
539 std::chrono::system_clock,
540 std::chrono::milliseconds
541 > time
542 );
543
544// INTEGRITY incident-85878 (timezone and clock_cast are not supported)
545#if (__cpp_lib_chrono >= 201907L && !defined(Q_OS_INTEGRITY)) || defined(Q_QDOC)
546#if __cpp_concepts >= 201907L || defined(Q_QDOC)
547private:
548 // The duration type of the result of a clock_cast<system_clock>.
549 // This duration may differ from the duration of the input.
550 template <typename Clock, typename Duration>
551 using system_clock_cast_duration = decltype(
552 std::chrono::clock_cast<std::chrono::system_clock>(
553 std::declval<const std::chrono::time_point<Clock, Duration> &>()
554 ).time_since_epoch()
555 );
556
557public:
558 // Generic clock, as long as it's compatible with us (= system_clock)
559 template <typename Clock, typename Duration>
560 static QDateTime fromStdTimePoint(const std::chrono::time_point<Clock, Duration> &time)
561 requires
562 requires(const std::chrono::time_point<Clock, Duration> &t) {
563 // the clock can be converted to system_clock
564 std::chrono::clock_cast<std::chrono::system_clock>(t);
565 // after the conversion to system_clock, the duration type
566 // we get is convertible to milliseconds
567 requires std::is_convertible_v<
568 system_clock_cast_duration<Clock, Duration>,
569 std::chrono::milliseconds
570 >;
571 }
572 {
573 using namespace std::chrono;
574 const sys_time<milliseconds> sysTime = clock_cast<system_clock>(time);
575 return fromStdTimePoint(sysTime);
576 }
577#endif // __cpp_concepts
578
579 // local_time
580 QT_POST_CXX17_API_IN_EXPORTED_CLASS
581 static QDateTime fromStdTimePoint(const std::chrono::local_time<std::chrono::milliseconds> &time)
582 {
583 return fromStdLocalTime(time);
584 }
585
586 QT_POST_CXX17_API_IN_EXPORTED_CLASS
587 static QDateTime fromStdLocalTime(const std::chrono::local_time<std::chrono::milliseconds> &time)
588 {
589 QDateTime result(QDate(1970, 1, 1), QTime(0, 0, 0), TransitionResolution::LegacyBehavior);
590 return result.addMSecs(time.time_since_epoch().count());
591 }
592
593#if QT_CONFIG(timezone) && (__cpp_lib_chrono >= 201907L || defined(Q_QDOC))
594 // zoned_time. defined in qtimezone.h
595 QT_POST_CXX17_API_IN_EXPORTED_CLASS
596 static QDateTime fromStdZonedTime(const std::chrono::zoned_time<
597 std::chrono::milliseconds,
598 const std::chrono::time_zone *
599 > &time);
600#endif // QT_CONFIG(timezone)
601
602 QT_POST_CXX17_API_IN_EXPORTED_CLASS
603 std::chrono::sys_time<std::chrono::milliseconds> toStdSysMilliseconds() const
604 {
605 const std::chrono::milliseconds duration(toMSecsSinceEpoch());
606 return std::chrono::sys_time<std::chrono::milliseconds>(duration);
607 }
608
609 QT_POST_CXX17_API_IN_EXPORTED_CLASS
610 std::chrono::sys_seconds toStdSysSeconds() const
611 {
612 const std::chrono::seconds duration(toSecsSinceEpoch());
613 return std::chrono::sys_seconds(duration);
614 }
615#endif // __cpp_lib_chrono >= 201907L && !Q_OS_INTEGRITY
616
617 friend std::chrono::milliseconds operator-(const QDateTime &lhs, const QDateTime &rhs)
618 {
619 return std::chrono::milliseconds(rhs.msecsTo(lhs));
620 }
621
622 friend QDateTime operator+(const QDateTime &dateTime, std::chrono::milliseconds duration)
623 {
624 return dateTime.addMSecs(duration.count());
625 }
626
627 friend QDateTime operator+(std::chrono::milliseconds duration, const QDateTime &dateTime)
628 {
629 return dateTime + duration;
630 }
631
632 QDateTime &operator+=(std::chrono::milliseconds duration)
633 {
634 *this = addMSecs(duration.count());
635 return *this;
636 }
637
638 friend QDateTime operator-(const QDateTime &dateTime, std::chrono::milliseconds duration)
639 {
640 return dateTime.addMSecs(-duration.count());
641 }
642
643 QDateTime &operator-=(std::chrono::milliseconds duration)
644 {
645 *this = addMSecs(-duration.count());
646 return *this;
647 }
648
649 // (1<<63) ms is 292277024.6 (average Gregorian) years, counted from the start of 1970, so
650 // Last is floor(1970 + 292277024.6); no year 0, so First is floor(1970 - 1 - 292277024.6)
651 enum class YearRange : qint32 { First = -292275056, Last = +292278994 };
652
653private:
654 bool equals(const QDateTime &other) const;
655#if QT_CORE_REMOVED_SINCE(6, 7)
656 bool precedes(const QDateTime &other) const;
657#endif
658 friend class QDateTimePrivate;
659
660 Data d;
661
662 friend bool comparesEqual(const QDateTime &lhs, const QDateTime &rhs)
663 { return lhs.equals(rhs); }
664 friend Q_CORE_EXPORT Qt::weak_ordering
665 compareThreeWay(const QDateTime &lhs, const QDateTime &rhs);
666 Q_DECLARE_WEAKLY_ORDERED_NON_NOEXCEPT(QDateTime)
667
668#ifndef QT_NO_DATASTREAM
669 friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QDateTime &);
670 friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QDateTime &);
671#endif
672
673#if !defined(QT_NO_DEBUG_STREAM) && QT_CONFIG(datestring)
674 friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QDateTime &);
675#endif
676};
678
679#ifndef QT_NO_DATASTREAM
680Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, QDate);
681Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QDate &);
682Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, QTime);
683Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QTime &);
684Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QDateTime &);
685Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QDateTime &);
686#endif // QT_NO_DATASTREAM
687
688#if !defined(QT_NO_DEBUG_STREAM) && QT_CONFIG(datestring)
689Q_CORE_EXPORT QDebug operator<<(QDebug, QDate);
690Q_CORE_EXPORT QDebug operator<<(QDebug, QTime);
691Q_CORE_EXPORT QDebug operator<<(QDebug, const QDateTime &);
692#endif
693
694// QDateTime is not noexcept for now -- to be revised once
695// timezone and calendaring support is added
696Q_CORE_EXPORT size_t qHash(const QDateTime &key, size_t seed = 0);
697Q_CORE_EXPORT size_t qHash(QDate key, size_t seed = 0) noexcept;
698Q_CORE_EXPORT size_t qHash(QTime key, size_t seed = 0) noexcept;
699
700#if QT_CONFIG(datestring) && QT_CORE_INLINE_IMPL_SINCE(6, 7)
701QDate QDate::fromString(const QString &string, QStringView format, QCalendar cal)
702{
703 return fromString(string, format, QLocale::DefaultTwoDigitBaseYear, cal);
704}
705
706QDateTime QDateTime::fromString(const QString &string, QStringView format, QCalendar cal)
707{
708 return fromString(string, format, QLocale::DefaultTwoDigitBaseYear, cal);
709}
710#endif
711
712QT_END_NAMESPACE
713
714#endif // QDATETIME_H
\inmodule QtCore\reentrant
Definition qdatastream.h:50
\inmodule QtCore\reentrant
Definition qdatetime.h:318
\inmodule QtCore \reentrant
Definition qdatetime.h:29
\inmodule QtCore
Definition qdir.h:22
constexpr bool operator==(iterator o) const
Definition qlist.h:235
constexpr bool operator<(iterator other) const
Definition qlist.h:237
constexpr bool operator<(const_iterator other) const
Definition qlist.h:231
const_iterator operator-(qsizetype j) const
Definition qlist.h:269
constexpr bool operator==(pointer p) const
Definition qlist.h:242
const T & reference
Definition qlist.h:211
constexpr bool operator>(const_iterator other) const
Definition qlist.h:233
std::random_access_iterator_tag iterator_category
Definition qlist.h:209
const T & operator[](qsizetype j) const
Definition qlist.h:220
const_iterator & operator-=(qsizetype j)
Definition qlist.h:267
constexpr const_iterator(iterator o)
Definition qlist.h:217
constexpr const_iterator()=default
const T & operator*() const
Definition qlist.h:218
constexpr bool operator!=(const_iterator o) const
Definition qlist.h:230
const_iterator operator+(qsizetype j) const
Definition qlist.h:268
const T * pointer
Definition qlist.h:210
constexpr bool operator<=(iterator other) const
Definition qlist.h:238
const value_type element_type
Definition qlist.h:208
const_iterator & operator++()
Definition qlist.h:244
constexpr bool operator!=(pointer p) const
Definition qlist.h:243
constexpr bool operator>(iterator other) const
Definition qlist.h:239
qsizetype operator-(const_iterator j) const
Definition qlist.h:248
constexpr bool operator==(const_iterator o) const
Definition qlist.h:229
constexpr bool operator>=(iterator other) const
Definition qlist.h:240
const_iterator operator--(int)
Definition qlist.h:247
const_iterator & operator--()
Definition qlist.h:246
const_iterator operator++(int)
Definition qlist.h:245
constexpr bool operator!=(iterator o) const
Definition qlist.h:236
const_iterator & operator+=(qsizetype j)
Definition qlist.h:266
friend const_iterator operator+(qsizetype j, const_iterator k)
Definition qlist.h:270
constexpr bool operator<=(const_iterator other) const
Definition qlist.h:232
const T * operator->() const
Definition qlist.h:219
constexpr bool operator>=(const_iterator other) const
Definition qlist.h:234
constexpr bool operator>(iterator other) const
Definition qlist.h:153
iterator operator+(qsizetype j) const
Definition qlist.h:188
iterator & operator-=(qsizetype j)
Definition qlist.h:187
T & operator[](qsizetype j) const
Definition qlist.h:144
iterator & operator++()
Definition qlist.h:164
constexpr bool operator<(const_iterator other) const
Definition qlist.h:157
constexpr bool operator!=(pointer p) const
Definition qlist.h:163
constexpr bool operator<=(iterator other) const
Definition qlist.h:152
constexpr bool operator!=(iterator o) const
Definition qlist.h:150
constexpr bool operator<=(const_iterator other) const
Definition qlist.h:158
T & operator*() const
Definition qlist.h:142
iterator operator++(int)
Definition qlist.h:165
constexpr bool operator>(const_iterator other) const
Definition qlist.h:159
constexpr bool operator>=(iterator other) const
Definition qlist.h:154
constexpr bool operator<(iterator other) const
Definition qlist.h:151
friend iterator operator+(qsizetype j, iterator k)
Definition qlist.h:190
std::random_access_iterator_tag iterator_category
Definition qlist.h:134
constexpr bool operator!=(const_iterator o) const
Definition qlist.h:156
constexpr bool operator==(const_iterator o) const
Definition qlist.h:155
constexpr bool operator>=(const_iterator other) const
Definition qlist.h:160
qsizetype operator-(iterator j) const
Definition qlist.h:168
iterator & operator--()
Definition qlist.h:166
constexpr iterator()=default
T * operator->() const
Definition qlist.h:143
iterator operator-(qsizetype j) const
Definition qlist.h:189
value_type element_type
Definition qlist.h:133
constexpr bool operator==(iterator o) const
Definition qlist.h:149
iterator & operator+=(qsizetype j)
Definition qlist.h:186
constexpr bool operator==(pointer p) const
Definition qlist.h:162
iterator operator--(int)
Definition qlist.h:167
Definition qlist.h:80
void append(const_iterator i1, const_iterator i2)
Definition qlist.h:887
void pop_back() noexcept
Definition qlist.h:736
iterator insert(const_iterator before, parameter_type t)
Definition qlist.h:548
void removeFirst() noexcept
Definition qlist.h:864
QList< T > & fill(parameter_type t, qsizetype size=-1)
Definition qlist.h:960
const_pointer constData() const noexcept
Definition qlist.h:490
void push_front(rvalue_ref t)
Definition qlist.h:734
T & first()
Definition qlist.h:702
T & last()
Definition qlist.h:705
QList(const String &str)
Definition qlist.h:349
const_iterator begin() const noexcept
Definition qlist.h:685
bool isDetached() const noexcept
Definition qlist.h:484
void removeAt(qsizetype i)
Definition qlist.h:647
reference back()
Definition qlist.h:746
QList< T > last(qsizetype n) const
Definition qlist.h:714
bool isSharedWith(const QList< T > &other) const
Definition qlist.h:486
QList< T > & operator+=(const QList< T > &l)
Definition qlist.h:755
QList< T > operator+(const QList< T > &l) &&
Definition qlist.h:759
reference emplaceFront(Args &&... args)
Definition qlist.h:909
reference emplace_back(Args &&... args)
Definition qlist.h:740
const T & constLast() const noexcept
Definition qlist.h:707
iterator erase(const_iterator begin, const_iterator end)
Definition qlist.h:946
iterator Iterator
Definition qlist.h:273
void resizeForOverwrite(qsizetype size)
Definition qlist.h:472
QList< T > sliced(qsizetype pos, qsizetype n) const
Definition qlist.h:718
QList(std::initializer_list< T > args)
Definition qlist.h:314
constexpr qsizetype max_size() const noexcept
Definition qlist.h:749
QTypeTraits::compare_eq_result_container< QList, U > operator==(const QList &other) const
Definition qlist.h:386
iterator insert(qsizetype i, parameter_type t)
Definition qlist.h:545
bool empty() const noexcept
Definition qlist.h:742
bool removeOne(const AT &t)
Definition qlist.h:655
QList< T > toList() const noexcept
Definition qlist.h:780
QList(InputIterator i1, InputIterator i2)
Definition qlist.h:327
static QList< T > fromReadOnlyData(const T(&t)[N]) noexcept
Definition qlist.h:786
static QList< T > fromList(const QList< T > &list) noexcept
Definition qlist.h:779
QList(qsizetype size, parameter_type t)
Definition qlist.h:307
const_reference back() const noexcept
Definition qlist.h:747
qsizetype capacity() const
Definition qlist.h:479
void swapItemsAt(qsizetype i, qsizetype j)
Definition qlist.h:724
void push_back(parameter_type t)
Definition qlist.h:732
void shrink_to_fit()
Definition qlist.h:748
QList< T > operator+(const QList< T > &l) const &
Definition qlist.h:757
void detach()
Definition qlist.h:483
const_iterator end() const noexcept
Definition qlist.h:686
iterator erase(const_iterator pos)
Definition qlist.h:699
bool endsWith(parameter_type t) const
Definition qlist.h:709
qsizetype count(const AT &t) const noexcept
Definition qlist.h:642
bool startsWith(parameter_type t) const
Definition qlist.h:708
const T * const_pointer
Definition qlist.h:100
friend qsizetype QtPrivate::lastIndexOf(const QList< V > &list, const U &u, qsizetype from) noexcept
iterator end()
Definition qlist.h:683
QList< T > operator+(QList< T > &&l) &&
Definition qlist.h:763
T takeAt(qsizetype i)
Definition qlist.h:666
std::reverse_iterator< iterator > reverse_iterator
Definition qlist.h:275
const_reference at(qsizetype i) const noexcept
Definition qlist.h:503
value_type takeFirst()
Definition qlist.h:623
constexpr qsizetype size() const noexcept
Definition qlist.h:447
QList< T > sliced(qsizetype pos) const
Definition qlist.h:716
QList< T > toVector() const noexcept
Definition qlist.h:783
T value(qsizetype i) const
Definition qlist.h:721
void swap(QList &other) noexcept
Definition qlist.h:361
iterator insert(const_iterator before, qsizetype n, parameter_type t)
Definition qlist.h:553
QList< T > & operator=(std::initializer_list< T > args)
Definition qlist.h:321
void move(qsizetype from, qsizetype to)
Definition qlist.h:667
QList(DataPointer dd) noexcept
Definition qlist.h:294
const_reverse_iterator crbegin() const noexcept
Definition qlist.h:695
T * pointer
Definition qlist.h:99
reference operator[](qsizetype i)
Definition qlist.h:508
const_iterator constBegin() const noexcept
Definition qlist.h:689
const_reference operator[](qsizetype i) const noexcept
Definition qlist.h:514
const_reverse_iterator rbegin() const noexcept
Definition qlist.h:693
constexpr QList() noexcept=default
void remove(qsizetype i, qsizetype n=1)
Definition qlist.h:851
value_type takeLast()
Definition qlist.h:624
const DataPointer & data_ptr() const &
Definition qlist.h:114
qsizetype removeIf(Predicate pred)
Definition qlist.h:661
reference front()
Definition qlist.h:744
DataPointer & data_ptr() &
Definition qlist.h:113
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition qlist.h:276
qsizetype removeAll(const AT &t)
Definition qlist.h:649
iterator emplace(qsizetype i, Args &&... args)
Definition qlist.h:930
const T & first() const noexcept
Definition qlist.h:703
iterator insert(qsizetype i, qsizetype n, parameter_type t)
Definition qlist.h:918
void append(QList< T > &&l)
Definition qlist.h:893
T & reference
Definition qlist.h:101
void squeeze()
Definition qlist.h:831
reference emplaceBack(Args &&... args)
Definition qlist.h:939
QList< T > mid(qsizetype pos, qsizetype len=-1) const
Definition qlist.h:1032
reverse_iterator rend()
Definition qlist.h:692
QTypeTraits::compare_lt_result_container< QList, U > operator>(const QList &other) const noexcept(noexcept(other< std::declval< QList< U > >()))
Definition qlist.h:416
T value_type
Definition qlist.h:98
void prepend(rvalue_ref t)
Definition qlist.h:530
QList< T > operator+(QList< T > &&l) const &
Definition qlist.h:761
QList & assign(std::initializer_list< T > l)
Definition qlist.h:583
iterator begin()
Definition qlist.h:682
void resize(qsizetype size, parameter_type c)
Definition qlist.h:466
QList< T > first(qsizetype n) const
Definition qlist.h:712
const T & constFirst() const noexcept
Definition qlist.h:704
static constexpr qsizetype maxSize()
Definition qlist.h:446
iterator emplace(const_iterator before, Args &&... args)
Definition qlist.h:587
void reserve(qsizetype size)
Definition qlist.h:810
QList & assign(InputIterator first, InputIterator last)
Definition qlist.h:580
static QList< T > fromVector(const QList< T > &vector) noexcept
Definition qlist.h:782
void replace(qsizetype i, parameter_type t)
Definition qlist.h:600
reverse_iterator rbegin()
Definition qlist.h:691
void pop_front() noexcept
Definition qlist.h:737
constexpr bool isEmpty() const noexcept
Definition qlist.h:458
pointer data()
Definition qlist.h:488
const T & const_reference
Definition qlist.h:102
const T & last() const noexcept
Definition qlist.h:706
constexpr qsizetype count() const noexcept
Definition qlist.h:455
void removeLast() noexcept
Definition qlist.h:872
void resize(qsizetype size)
Definition qlist.h:460
friend auto compareThreeWay(const QList &lhs, const QList &rhs)
Definition qlist.h:367
T Type
Definition qlist.h:97
const_iterator cend() const noexcept
Definition qlist.h:688
void append(parameter_type t)
Definition qlist.h:515
QList< T > & operator+=(parameter_type t)
Definition qlist.h:765
QTypeTraits::compare_eq_result_container< QList, U > operator!=(const QList &other) const
Definition qlist.h:398
const_iterator constEnd() const noexcept
Definition qlist.h:690
const_reverse_iterator rend() const noexcept
Definition qlist.h:694
T value(qsizetype i, parameter_type defaultValue) const
Definition qlist.h:881
const_iterator cbegin() const noexcept
Definition qlist.h:687
QList & assign(qsizetype n, parameter_type t)
Definition qlist.h:573
QTypeTraits::compare_lt_result_container< QList, U > operator>=(const QList &other) const noexcept(noexcept(std::declval< QList< U > >()< other))
Definition qlist.h:430
const_pointer data() const noexcept
Definition qlist.h:489
constexpr qsizetype length() const noexcept
Definition qlist.h:456
void clear()
Definition qlist.h:491
const_reference front() const noexcept
Definition qlist.h:745
QList< T > & operator+=(QList< T > &&l)
Definition qlist.h:756
friend qsizetype QtPrivate::indexOf(const QList< V > &list, const U &u, qsizetype from) noexcept
DataPointer && data_ptr() &&
Definition qlist.h:115
void append(const QList< T > &l)
Definition qlist.h:525
const_iterator ConstIterator
Definition qlist.h:274
const_reverse_iterator crend() const noexcept
Definition qlist.h:696
\inmodule QtCore \reentrant
Definition qdatetime.h:250
QString && asString(QString &&s)
Definition qstring.h:1681
constexpr QAnyStringArg qStringLikeToArg(QAnyStringView s) noexcept
Definition qstring.h:1742
qsizetype indexOf(const QList< T > &vector, const U &u, qsizetype from) noexcept
Definition qlist.h:984
const QString & asString(const QString &s)
Definition qstring.h:1680
qsizetype lastIndexOf(const QList< T > &vector, const U &u, qsizetype from) noexcept
Definition qlist.h:999
qsizetype lastIndexOf(const QList< V > &list, const U &u, qsizetype from) noexcept
qsizetype indexOf(const QList< V > &list, const U &u, qsizetype from) noexcept
static constexpr qsizetype lengthHelperPointer(const Char *data) noexcept
std::is_same< Char, char32_t > IsCompatibleChar32TypeHelper
Definition qstring.h:57
constexpr bool isLatin1(QLatin1StringView s) noexcept
Definition qstring.h:77
QString operator""_s(const char16_t *str, size_t size) noexcept
Definition qstring.h:1788
Definition qcompare.h:76
QByteArrayView qToByteArrayViewIgnoringNull(const QByteArrayLike &b) noexcept
Q_DECLARE_TYPEINFO(QByteArrayView, Q_PRIMITIVE_TYPE)
#define __has_builtin(x)
#define __has_cpp_attribute(x)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2568
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")
Q_CORE_EXPORT Q_DECL_CONST_FUNCTION unsigned int qt_int_sqrt(unsigned int n)
\inmodule QtCore \title Global Qt Declarations
Definition qglobal.cpp:99
qsizetype erase(QList< T > &list, const AT &t)
Definition qlist.h:1064
QList(InputIterator, InputIterator) -> QList< ValueType >
qsizetype erase_if(QList< T > &list, Predicate pred)
Definition qlist.h:1070
QString operator+(const QString &s1, QChar s2)
Definition qstring.h:1562
QString operator+(QString &&lhs, const QString &rhs)
Definition qstring.h:1560
qsizetype erase_if(QString &s, Predicate pred)
Definition qstring.h:1780
#define QT_UNICODE_LITERAL(str)
Definition qstring.h:1814
QString operator+(QString &&lhs, QChar rhs)
Definition qstring.h:1564
QString operator+(QChar s1, const QString &s2)
Definition qstring.h:1566
QString operator+(const QString &s1, const QString &s2)
Definition qstring.h:1558
qsizetype erase(QString &s, const T &t)
Definition qstring.h:1774
QList< QList< qInternalCallback > > callbacks
Definition qglobal.cpp:128
qsizetype indexOf(const AT &t, qsizetype from=0) const noexcept
Definition qlist.h:1019
const Self * self() const
Definition qlist.h:39
bool contains(const AT &t) const noexcept
Definition qlist.h:48
QListSpecialMethodsBase()=default
qsizetype lastIndexOf(const AT &t, qsizetype from=-1) const noexcept
Definition qlist.h:1026
QListSpecialMethods()=default
constexpr QAnyStringArg(QAnyStringView v) noexcept
Definition qstring.h:1726
QAnyStringView string
Definition qstring.h:1724
QLatin1StringView string
Definition qstring.h:1718
constexpr QLatin1StringArg(QLatin1StringView v) noexcept
Definition qstring.h:1720
constexpr QStringViewArg(QStringView v) noexcept
Definition qstring.h:1714