Как установить часовой пояс в Qt?
Может кто-нибудь показать мне, как установить часовой пояс в Qt? В настоящее время я использую системный вызов linux для установки часового пояса, но это не отражается в API currentTime() Qt. В Qt 5 и выше есть API setTimeZone(), но я не знаю, как его использовать. Заранее спасибо.
0 ответов
Как заявил Фрэнк в комментариях, в Qt нет API для прямого изменения системного часового пояса. С помощьюtimedatectl
это один путь.
Однако вместо system()
вызов, QProcess
можно использовать так для примера часового пояса:
auto timezone = QString("Europe/Paris");
auto command = QString("timedatectl set-timezone ") + timezone;
auto ret = QProcess::execute(command);
if (ret != 0) {
qDebug("timedatectl failed : %d", ret);
}
Если уже используется объект QTimeZone, команду можно собрать следующим образом:
auto timezoneObj = QTimeZone();
// process timezoneObj
if (!timezoneObj.isValid()) {
qDebug("invalid timezone qobject");
return;
}
auto timezone = timezoneObj.id();
auto command = QString("timedatectl set-timezone ") + timezone;
auto ret = QProcess::execute(command);
if (ret != 0) {
qDebug("timedatectl failed : %d", ret);
}
Вместо использования QProcess я бы, вероятно, рекомендовал использовать вместо него QDBus.
Вызов командной строки qdbus:
qdbus --system org.freedesktop.timedate1 /org/freedesktop/timedate1 org.freedesktop.timedate1.SetTimezone Europe/Berlin false
Код Qt:
QDBusInterface timedated("org.freedesktop.timedate1", "/org/freedesktop/timedate1", "org.freedesktop.timedate1", QDBusConnection::systemBus());
QDBusPendingReply<> setTz = timedated.callWithArgumentList(QDBus::Block, "SetTimeZone", {"Europe/Berlin", false});