diff --git a/desktop/kde/applications/kalarmcal/files/qt5.patch b/desktop/kde/applications/kalarmcal/files/qt5.patch
new file mode 100644
index 0000000000..3b7689fa8a
--- /dev/null
+++ b/desktop/kde/applications/kalarmcal/files/qt5.patch
@@ -0,0 +1,183 @@
+diff -Nuar a/src/kaevent.cpp b/src/kaevent.cpp
+--- a/src/kaevent.cpp 2017-12-04 13:20:32.000000000 +0300
++++ b/src/kaevent.cpp 2017-12-16 21:09:56.797883339 +0300
+@@ -917,7 +917,9 @@
+ break;
+ }
+ // Fall through to AUDIO_ALARM
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case AUDIO_ALARM:
+ mAudioFile = data.cleanText;
+ mSpeak = data.speak && mAudioFile.isEmpty();
+@@ -992,7 +994,9 @@
+ noSetNextTime = true;
+ }
+ // fall through to REMINDER_ALARM
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case REMINDER_ALARM:
+ case AT_LOGIN_ALARM:
+ case DISPLAYING_ALARM:
+@@ -1000,7 +1004,9 @@
+ mNextMainDateTime = alTime;
+ }
+ // fall through to MAIN_ALARM
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case MAIN_ALARM:
+ // Ensure that the basic fields are set up even if there is no main
+ // alarm in the event (if it has expired and then been deferred)
+@@ -1014,7 +1020,9 @@
+ break;
+ }
+ // fall through to MESSAGE
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case KAAlarm::MESSAGE:
+ mFont = data.font;
+ mUseDefaultFont = data.defaultFont;
+@@ -1022,7 +1030,9 @@
+ isEmailText = true;
+ }
+ // fall through to FILE
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case KAAlarm::FILE:
+ mBgColour = data.bgColour;
+ mFgColour = data.fgColour;
+@@ -1552,7 +1562,9 @@
+ if (mRepetition)
+ alarm->setCustomProperty(KACalendar::APPNAME, NEXT_REPEAT_PROPERTY,
+ QString::number(mNextRepeat));
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case REMINDER_ALARM:
+ case INVALID_ALARM: {
+ if (types == QStringList(REMINDER_TYPE)
+@@ -1566,7 +1578,9 @@
+ case KAEvent::FILE:
+ alltypes += FILE_TYPE;
+ // fall through to MESSAGE
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case KAEvent::MESSAGE:
+ alarm->setDisplayAlarm(AlarmText::toCalendarText(mText));
+ display = true;
+@@ -3503,7 +3517,9 @@
+ break;
+ }
+ // fall through to DEFERRED_ALARM
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case KAAlarm::DEFERRED_ALARM:
+ if (mDeferral != NO_DEFERRAL) {
+ al_d->mType = (mDeferral == REMINDER_DEFERRAL) ? KAAlarm::DEFERRED_REMINDER_ALARM : KAAlarm::DEFERRED_ALARM;
+@@ -3579,7 +3595,9 @@
+ return alarm(KAAlarm::REMINDER_ALARM);
+ }
+ // fall through to REMINDER_ALARM
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case KAAlarm::REMINDER_ALARM:
+ // There can only be one deferral alarm
+ if (mDeferral == REMINDER_DEFERRAL) {
+@@ -3589,20 +3607,26 @@
+ return alarm(KAAlarm::DEFERRED_ALARM);
+ }
+ // fall through to DEFERRED_ALARM
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case KAAlarm::DEFERRED_REMINDER_ALARM:
+ case KAAlarm::DEFERRED_ALARM:
+ if (mRepeatAtLogin) {
+ return alarm(KAAlarm::AT_LOGIN_ALARM);
+ }
+ // fall through to AT_LOGIN_ALARM
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case KAAlarm::AT_LOGIN_ALARM:
+ if (mDisplaying) {
+ return alarm(KAAlarm::DISPLAYING_ALARM);
+ }
+ // fall through to DISPLAYING_ALARM
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case KAAlarm::DISPLAYING_ALARM:
+ // fall through to default
+ case KAAlarm::INVALID_ALARM:
+@@ -3646,7 +3670,9 @@
+ --mAlarmCount;
+ }
+ // fall through to AT_LOGIN_ALARM
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case KAAlarm::AT_LOGIN_ALARM:
+ if (mRepeatAtLogin) {
+ // Remove the at-login alarm, but keep a note of it for archiving purposes
+@@ -3969,7 +3995,9 @@
+ break;
+ }
+ // fall through to Display
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case Alarm::Display: {
+ if (alarm->type() == Alarm::Display) {
+ data.action = KAAlarm::MESSAGE;
+@@ -5014,7 +5042,9 @@
+ case KAAlarm::FILE:
+ types += KAEventPrivate::FILE_TYPE;
+ // fall through to MESSAGE
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case KAAlarm::MESSAGE:
+ alarm->setDisplayAlarm(altxt);
+ break;
+@@ -5873,7 +5903,9 @@
+ break;
+ }
+ // fall through to default
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ default:
+ command += ch;
+ break;
+diff -Nuar a/src/karecurrence.cpp b/src/karecurrence.cpp
+--- a/src/karecurrence.cpp 2017-12-04 13:20:32.000000000 +0300
++++ b/src/karecurrence.cpp 2017-12-16 21:24:22.815820852 +0300
+@@ -319,7 +319,9 @@
+ // Convert an hourly recurrence to a minutely one
+ rrule->setRecurrenceType(RecurrenceRule::rMinutely);
+ rrule->setFrequency(rrule->frequency() * 60);
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ // fall through to rMinutely
+ case Recurrence::rMinutely:
+ case Recurrence::rDaily:
+@@ -493,7 +495,9 @@
+ break;
+ }
+ // fall through to rWeekly
++#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
+ Q_FALLTHROUGH();
++#endif
+ case WEEKLY:
+ case MONTHLY_POS:
+ recur.defaultRRule(true)->setByDays(rrule->byDays());
diff --git a/desktop/kde/applications/kalarmcal/pspec.xml b/desktop/kde/applications/kalarmcal/pspec.xml
index 3824abd9af..42613fb134 100644
--- a/desktop/kde/applications/kalarmcal/pspec.xml
+++ b/desktop/kde/applications/kalarmcal/pspec.xml
@@ -32,6 +32,9 @@
kholidays-devel
extra-cmake-modules
+
+ qt5.patch
+