Duration Duration::fromString(const QString &s, Format format, bool *ok) { if (ok) *ok = false; QRegExp matcher; Duration tmp; switch (format) { case Format_Hour: { matcher.setPattern("^(\\d*)h(\\d*)m$" ); int pos = matcher.indexIn(s); if (pos > -1) { tmp.addHours(matcher.cap(1).toUInt()); tmp.addMinutes(matcher.cap(2).toUInt()); if (ok) *ok = true; } break; } case Format_DayTime: { matcher.setPattern("^(\\d*) (\\d*):(\\d*):(\\d*)\\.(\\d*)$" ); int pos = matcher.indexIn(s); if (pos > -1) { tmp.addDays(matcher.cap(1).toUInt()); tmp.addHours(matcher.cap(2).toUInt()); tmp.addMinutes(matcher.cap(3).toUInt()); tmp.addSeconds(matcher.cap(4).toUInt()); tmp.addMilliseconds(matcher.cap(5).toUInt()); if (ok) *ok = true; } break; } case Format_HourFraction: { // should be in double format bool res; double f = QLocale().toDouble(s, &res); if (ok) *ok = res; if (res) { return Duration((qint64)(f)*3600*1000); } break; } default: qFatal("Unknown format"); break; } return tmp; }