Implement the settings and run a QTimer every hour or so that checks if period or ovulation is coming within the configured number of days. If so, check if we have written to cache location a last-notified-TYPE file with a timestamp in it. If not, or if it is from last cycle, then showMessage with the tray icon if enabled. If tray icon not enabled, then show it and showMessage and then hide again after some timeout. After everything, QSaveFile over last-notified-TYPE file with current timestamp.