8#include "QtMarbleConfigDialog.h"
10#include "ui_MarbleCacheSettingsWidget.h"
11#include "ui_MarbleCloudSyncSettingsWidget.h"
12#include "ui_MarbleNavigationSettingsWidget.h"
13#include "ui_MarbleTimeSettingsWidget.h"
14#include "ui_MarbleViewSettingsWidget.h"
17#include <QApplication>
19#include <QDialogButtonBox>
20#include <QNetworkProxy>
28#include "BookmarkSyncManager.h"
29#include "CloudSyncManager.h"
30#include "MarbleClock.h"
31#include "MarbleDebug.h"
32#include "MarbleDirs.h"
36#include "RenderPlugin.h"
37#include "RenderPluginModel.h"
38#include "routing/RoutingProfilesWidget.h"
43class QtMarbleConfigDialogPrivate
46 QtMarbleConfigDialogPrivate(MarbleWidget *marbleWidget, CloudSyncManager *cloudSyncManager)
48 , ui_navigationSettings()
51 , w_pluginSettings(nullptr)
52 , m_cloudSyncStatusLabel(nullptr)
53 , m_marbleWidget(marbleWidget)
54 , m_syncManager(cloudSyncManager ? cloudSyncManager->bookmarkSyncManager() : nullptr)
55 , m_cloudSyncManager(cloudSyncManager)
60 Ui::MarbleViewSettingsWidget ui_viewSettings;
61 Ui::MarbleNavigationSettingsWidget ui_navigationSettings;
62 Ui::MarbleTimeSettingsWidget ui_timeSettings;
63 Ui::MarbleCacheSettingsWidget ui_cacheSettings;
64 Ui::MarbleCloudSyncSettingsWidget ui_cloudSyncSettings;
65 MarblePluginSettingsWidget *w_pluginSettings;
69 QLabel *m_cloudSyncStatusLabel;
71 MarbleWidget *
const m_marbleWidget;
72 BookmarkSyncManager *
const m_syncManager;
73 CloudSyncManager *
const m_cloudSyncManager;
75 RenderPluginModel m_pluginModel;
80QtMarbleConfigDialog::QtMarbleConfigDialog(MarbleWidget *marbleWidget, CloudSyncManager *cloudSyncManager,
QWidget *parent)
82 , d(new QtMarbleConfigDialogPrivate(marbleWidget, cloudSyncManager))
89 connect(buttons, SIGNAL(accepted()),
this, SLOT(accept()));
90 connect(buttons, SIGNAL(rejected()),
this, SLOT(reject()));
93 connect(
this, SIGNAL(accepted()),
this, SLOT(writeSettings()));
96 auto w_viewSettings =
new QWidget(
this);
98 d->ui_viewSettings.setupUi(w_viewSettings);
99 tabWidget->addTab(w_viewSettings, tr(
"View"));
101 d->ui_viewSettings.kcfg_labelLocalization->hide();
102 d->ui_viewSettings.label_labelLocalization->hide();
105 auto w_navigationSettings =
new QWidget(
this);
107 d->ui_navigationSettings.setupUi(w_navigationSettings);
108 tabWidget->addTab(w_navigationSettings, tr(
"Navigation"));
109 d->ui_navigationSettings.kcfg_dragLocation->hide();
110 d->ui_navigationSettings.label_dragLocation->hide();
113 auto w_cacheSettings =
new QWidget(
this);
115 d->ui_cacheSettings.setupUi(w_cacheSettings);
116 tabWidget->addTab(w_cacheSettings, tr(
"Cache and Proxy"));
118 connect(d->ui_cacheSettings.button_clearVolatileCache, SIGNAL(clicked()), SIGNAL(clearVolatileCacheClicked()));
119 connect(d->ui_cacheSettings.button_clearPersistentCache, SIGNAL(clicked()), SIGNAL(clearPersistentCacheClicked()));
122 auto w_timeSettings =
new QWidget(
this);
123 d->ui_timeSettings.setupUi(w_timeSettings);
124 tabWidget->addTab(w_timeSettings, tr(
"Date and Time"));
127 QWidget *w_routingSettings =
new RoutingProfilesWidget(marbleWidget->model());
128 tabWidget->addTab(w_routingSettings, tr(
"Routing"));
131 d->m_pluginModel.setRenderPlugins(d->m_marbleWidget->renderPlugins());
132 d->w_pluginSettings =
new MarblePluginSettingsWidget(
this);
133 d->w_pluginSettings->setModel(&d->m_pluginModel);
134 d->w_pluginSettings->setObjectName(
"plugin_page");
135 tabWidget->addTab(d->w_pluginSettings, tr(
"Plugins"));
138 d->w_pluginSettings->setAboutIcon(
QIcon(QStringLiteral(
":/icons/help-about.png")));
139 d->w_pluginSettings->setConfigIcon(
QIcon(QStringLiteral(
":/icons/settings-configure.png")));
141 connect(
this, SIGNAL(rejected()), &d->m_pluginModel, SLOT(retrievePluginState()));
142 connect(
this, SIGNAL(accepted()), &d->m_pluginModel, SLOT(applyPluginState()));
144 auto w_cloudSyncSettings =
new QWidget(
this);
145 d->ui_cloudSyncSettings.setupUi(w_cloudSyncSettings);
146 tabWidget->addTab(w_cloudSyncSettings, tr(
"Synchronization"));
147 d->ui_cloudSyncSettings.button_syncNow->setEnabled(syncBookmarks());
148 d->m_cloudSyncStatusLabel = d->ui_cloudSyncSettings.cloudSyncStatus;
149 connect(d->ui_cloudSyncSettings.button_syncNow, SIGNAL(clicked()), SIGNAL(syncNowClicked()));
150 connect(d->ui_cloudSyncSettings.testLoginButton, SIGNAL(clicked()),
this, SLOT(updateCloudSyncCredentials()));
152 if (d->m_syncManager) {
153 connect(d->m_syncManager, SIGNAL(syncComplete()),
this, SLOT(updateLastSync()));
156 if (d->m_cloudSyncManager) {
157 connect(d->m_cloudSyncManager, SIGNAL(statusChanged(
QString)),
this, SLOT(updateCloudSyncStatus(
QString)));
162 layout->addWidget(tabWidget);
163 layout->addWidget(buttons);
166 connect(
this, &QtMarbleConfigDialog::settingsChanged,
this, &QtMarbleConfigDialog::syncSettings);
168 initializeCustomTimezone();
171QtMarbleConfigDialog::~QtMarbleConfigDialog()
176void QtMarbleConfigDialog::syncSettings()
178 d->m_settings.sync();
191 mDebug() <<
"Unknown proxy type! Using Http Proxy instead.";
207void QtMarbleConfigDialog::updateCloudSyncCredentials()
209 if (d->m_cloudSyncManager) {
210 d->m_cloudSyncManager->setOwncloudCredentials(d->ui_cloudSyncSettings.kcfg_owncloudServer->text(),
211 d->ui_cloudSyncSettings.kcfg_owncloudUsername->text(),
212 d->ui_cloudSyncSettings.kcfg_owncloudPassword->text());
216void QtMarbleConfigDialog::disableSyncNow()
218 if (!d->m_syncManager) {
222 d->ui_cloudSyncSettings.button_syncNow->setDisabled(
true);
224 auto timeoutTimer =
new QTimer(
this);
228 connect(d->m_syncManager, SIGNAL(syncComplete()),
this, SLOT(enableSyncNow()));
229 connect(d->m_syncManager, SIGNAL(syncComplete()), timeoutTimer, SLOT(
stop()));
230 connect(d->m_syncManager, SIGNAL(syncComplete()), timeoutTimer, SLOT(deleteLater()));
232 timeoutTimer->start(30 * 1000);
235void QtMarbleConfigDialog::enableSyncNow()
237 if (!d->m_syncManager) {
241 d->ui_cloudSyncSettings.button_syncNow->setEnabled(
true);
244void QtMarbleConfigDialog::updateLastSync()
246 if (!d->m_syncManager) {
250 if (!d->m_syncManager->lastSync().isValid()) {
251 d->ui_cloudSyncSettings.labelLastSync->setText(tr(
"Never synchronized."));
255 const QString title = tr(
"Last synchronization: %1").
arg(d->m_syncManager->lastSync().toString());
257 d->ui_cloudSyncSettings.labelLastSync->setText(title);
260void QtMarbleConfigDialog::readSettings()
266 d->ui_viewSettings.kcfg_distanceUnit->setCurrentIndex(measurementSystem());
267 d->ui_viewSettings.kcfg_angleUnit->setCurrentIndex(angleUnit());
268 d->ui_viewSettings.kcfg_stillQuality->setCurrentIndex(stillQuality());
269 d->ui_viewSettings.kcfg_animationQuality->setCurrentIndex(animationQuality());
270 d->ui_viewSettings.kcfg_labelLocalization->setCurrentIndex(
Marble::Native);
271 d->ui_viewSettings.kcfg_mapFont->setCurrentFont(mapFont());
275 d->ui_navigationSettings.kcfg_onStartup->setCurrentIndex(onStartup());
276 d->ui_navigationSettings.kcfg_inertialEarthRotation->setChecked(inertialEarthRotation());
277 d->ui_navigationSettings.kcfg_mouseViewRotation->setChecked(mouseViewRotation());
278 d->ui_navigationSettings.kcfg_animateTargetVoyage->setChecked(animateTargetVoyage());
287 d->ui_navigationSettings.kcfg_externalMapEditor->setCurrentIndex(editorIndex);
290 d->ui_cacheSettings.kcfg_volatileTileCacheLimit->setValue(volatileTileCacheLimit());
291 d->ui_cacheSettings.kcfg_persistentTileCacheLimit->setValue(persistentTileCacheLimit());
292 d->ui_cacheSettings.kcfg_proxyUrl->setText(proxyUrl());
293 d->ui_cacheSettings.kcfg_proxyPort->setValue(proxyPort());
294 d->ui_cacheSettings.kcfg_proxyUser->setText(proxyUser());
295 d->ui_cacheSettings.kcfg_proxyPass->setText(proxyPass());
296 d->ui_cacheSettings.kcfg_proxyType->setCurrentIndex(proxyType());
297 d->ui_cacheSettings.kcfg_proxyAuth->setChecked(proxyAuth());
300 d->ui_timeSettings.kcfg_systemTimezone->setChecked(systemTimezone());
301 d->ui_timeSettings.kcfg_customTimezone->setChecked(customTimezone());
302 d->ui_timeSettings.kcfg_chosenTimezone->setCurrentIndex(chosenTimezone());
303 d->ui_timeSettings.kcfg_utc->setChecked(
UTC());
304 d->ui_timeSettings.kcfg_systemTime->setChecked(systemTime());
305 d->ui_timeSettings.kcfg_lastSessionTime->setChecked(lastSessionTime());
306 if (systemTimezone() ==
true) {
310 }
else if (
UTC() ==
true) {
311 d->m_marbleWidget->model()->setClockTimezone(0);
312 }
else if (customTimezone() ==
true) {
313 d->m_marbleWidget->model()->setClockTimezone(d->m_timezone.value(chosenTimezone()));
319 d->ui_cloudSyncSettings.kcfg_enableSync->setChecked(syncEnabled());
320 d->ui_cloudSyncSettings.kcfg_syncBookmarks->setChecked(syncBookmarks());
321 d->ui_cloudSyncSettings.kcfg_syncRoutes->setChecked(syncRoutes());
322 d->ui_cloudSyncSettings.kcfg_owncloudServer->setText(owncloudServer());
323 d->ui_cloudSyncSettings.kcfg_owncloudUsername->setText(owncloudUsername());
324 d->ui_cloudSyncSettings.kcfg_owncloudPassword->setText(owncloudPassword());
327 d->m_marbleWidget->readPluginSettings(d->m_settings);
330 Q_EMIT settingsChanged();
333void QtMarbleConfigDialog::updateCloudSyncStatus(
const QString &
status)
335 d->m_cloudSyncStatusLabel->setText(
status);
336 CloudSyncManager::Status status_type = d->m_cloudSyncManager ? d->m_cloudSyncManager->status() : CloudSyncManager::Unknown;
337 switch (status_type) {
338 case CloudSyncManager::Success:
339 d->m_cloudSyncStatusLabel->setStyleSheet(QStringLiteral(
"QLabel { color : green; }"));
341 case CloudSyncManager::Error:
342 d->m_cloudSyncStatusLabel->setStyleSheet(QStringLiteral(
"QLabel { color : red; }"));
344 case CloudSyncManager::Unknown:
345 d->m_cloudSyncStatusLabel->setStyleSheet(QStringLiteral(
"QLabel { color : grey; }"));
350void QtMarbleConfigDialog::writeSettings()
354 d->m_settings.beginGroup(
"View");
355 d->m_settings.setValue(
"distanceUnit", d->ui_viewSettings.kcfg_distanceUnit->currentIndex());
356 d->m_settings.setValue(
"angleUnit", d->ui_viewSettings.kcfg_angleUnit->currentIndex());
357 d->m_settings.setValue(
"stillQuality", d->ui_viewSettings.kcfg_stillQuality->currentIndex());
358 d->m_settings.setValue(
"animationQuality", d->ui_viewSettings.kcfg_animationQuality->currentIndex());
359 d->m_settings.setValue(
"mapFont", d->ui_viewSettings.kcfg_mapFont->currentFont());
360 d->m_settings.endGroup();
362 d->m_settings.beginGroup(
"Navigation");
363 d->m_settings.setValue(
"onStartup", d->ui_navigationSettings.kcfg_onStartup->currentIndex());
364 d->m_settings.setValue(
"inertialEarthRotation", d->ui_navigationSettings.kcfg_inertialEarthRotation->isChecked());
365 d->m_settings.setValue(
"mouseViewRotation", d->ui_navigationSettings.kcfg_mouseViewRotation->isChecked());
366 d->m_settings.setValue(
"animateTargetVoyage", d->ui_navigationSettings.kcfg_animateTargetVoyage->isChecked());
367 if (d->ui_navigationSettings.kcfg_externalMapEditor->currentIndex() == 0) {
368 d->m_settings.setValue(
"externalMapEditor", {});
369 }
else if (d->ui_navigationSettings.kcfg_externalMapEditor->currentIndex() == 1) {
370 d->m_settings.setValue(
"externalMapEditor", QStringLiteral(
"potlatch"));
371 }
else if (d->ui_navigationSettings.kcfg_externalMapEditor->currentIndex() == 2) {
372 d->m_settings.setValue(
"externalMapEditor", QStringLiteral(
"josm"));
373 }
else if (d->ui_navigationSettings.kcfg_externalMapEditor->currentIndex() == 3) {
374 d->m_settings.setValue(
"externalMapEditor", QStringLiteral(
"merkaartor"));
376 Q_ASSERT(
false &&
"Unexpected index of the external editor setting");
378 d->m_settings.endGroup();
380 d->m_settings.beginGroup(
"Cache");
381 d->m_settings.setValue(
"volatileTileCacheLimit", d->ui_cacheSettings.kcfg_volatileTileCacheLimit->value());
382 d->m_settings.setValue(
"persistentTileCacheLimit", d->ui_cacheSettings.kcfg_persistentTileCacheLimit->value());
383 d->m_settings.setValue(
"proxyUrl", d->ui_cacheSettings.kcfg_proxyUrl->text());
384 d->m_settings.setValue(
"proxyPort", d->ui_cacheSettings.kcfg_proxyPort->value());
385 d->m_settings.setValue(
"proxyType", d->ui_cacheSettings.kcfg_proxyType->currentIndex());
386 if (d->ui_cacheSettings.kcfg_proxyAuth->isChecked()) {
387 d->m_settings.setValue(
"proxyAuth",
true);
388 d->m_settings.setValue(
"proxyUser", d->ui_cacheSettings.kcfg_proxyUser->text());
389 d->m_settings.setValue(
"proxyPass", d->ui_cacheSettings.kcfg_proxyPass->text());
391 d->m_settings.setValue(
"proxyAuth",
false);
393 d->m_settings.endGroup();
395 d->m_settings.beginGroup(
"Time");
396 d->m_settings.setValue(
"systemTimezone", d->ui_timeSettings.kcfg_systemTimezone->isChecked());
397 d->m_settings.setValue(
"UTC", d->ui_timeSettings.kcfg_utc->isChecked());
398 d->m_settings.setValue(
"customTimezone", d->ui_timeSettings.kcfg_customTimezone->isChecked());
399 d->m_settings.setValue(
"systemTime", d->ui_timeSettings.kcfg_systemTime->isChecked());
400 d->m_settings.setValue(
"lastSessionTime", d->ui_timeSettings.kcfg_lastSessionTime->isChecked());
401 d->m_settings.setValue(
"chosenTimezone", d->ui_timeSettings.kcfg_chosenTimezone->currentIndex());
402 d->m_settings.endGroup();
404 d->m_settings.beginGroup(
"CloudSync");
405 d->m_settings.setValue(
"enableSync", d->ui_cloudSyncSettings.kcfg_enableSync->isChecked());
406 d->m_settings.setValue(
"syncBackend", QStringLiteral(
"owncloud"));
407 d->m_settings.setValue(
"syncBookmarks", d->ui_cloudSyncSettings.kcfg_syncBookmarks->isChecked());
408 d->m_settings.setValue(
"syncRoutes", d->ui_cloudSyncSettings.kcfg_syncRoutes->isChecked());
409 d->m_settings.setValue(
"owncloudServer", d->ui_cloudSyncSettings.kcfg_owncloudServer->text());
410 d->m_settings.setValue(
"owncloudUsername", d->ui_cloudSyncSettings.kcfg_owncloudUsername->text());
411 d->m_settings.setValue(
"owncloudPassword", d->ui_cloudSyncSettings.kcfg_owncloudPassword->text());
412 d->m_settings.endGroup();
415 d->m_marbleWidget->writePluginSettings(d->m_settings);
417 Q_EMIT settingsChanged();
420MarbleLocale::MeasurementSystem QtMarbleConfigDialog::measurementSystem()
const
422 if (d->m_settings.contains(
"View/distanceUnit")) {
423 return (MarbleLocale::MeasurementSystem)d->m_settings.value(
"View/distanceUnit").toInt();
426 MarbleLocale *locale = MarbleGlobal::getInstance()->locale();
427 return locale->measurementSystem();
437 d->m_settings.setValue(
"View/angleUnit", (
int)unit);
438 d->ui_viewSettings.kcfg_angleUnit->setCurrentIndex(angleUnit());
439 Q_EMIT settingsChanged();
452QFont QtMarbleConfigDialog::mapFont()
const
457int QtMarbleConfigDialog::onStartup()
const
459 bool smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
461 return d->m_settings.value(
"Navigation/onStartup", defaultValue).toInt();
464QString QtMarbleConfigDialog::externalMapEditor()
const
466 return d->m_settings.value(
"Navigation/externalMapEditor", {}).
toString();
469bool QtMarbleConfigDialog::animateTargetVoyage()
const
471 const bool smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen;
472 return d->m_settings.value(
"Navigation/animateTargetVoyage", smallScreen).toBool();
475bool QtMarbleConfigDialog::inertialEarthRotation()
const
477 return d->m_settings.value(
"Navigation/inertialEarthRotation",
true).toBool();
480bool QtMarbleConfigDialog::mouseViewRotation()
const
482 return d->m_settings.value(
"Navigation/mouseViewRotation",
true).toBool();
485int QtMarbleConfigDialog::volatileTileCacheLimit()
const
487 int defaultValue = (MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen) ? 6 : 100;
488 return d->m_settings.value(
"Cache/volatileTileCacheLimit", defaultValue).toInt();
491int QtMarbleConfigDialog::persistentTileCacheLimit()
const
493 return d->m_settings.value(
"Cache/persistentTileCacheLimit", 0).toInt();
496QString QtMarbleConfigDialog::proxyUrl()
const
498 return d->m_settings.value(
"Cache/proxyUrl", {}).
toString();
501int QtMarbleConfigDialog::proxyPort()
const
503 return d->m_settings.value(
"Cache/proxyPort", 8080).toInt();
506QString QtMarbleConfigDialog::proxyUser()
const
508 return d->m_settings.value(
"Cache/proxyUser", {}).
toString();
511QString QtMarbleConfigDialog::proxyPass()
const
513 return d->m_settings.value(
"Cache/proxyPass", {}).
toString();
516bool QtMarbleConfigDialog::proxyType()
const
521bool QtMarbleConfigDialog::proxyAuth()
const
523 return d->m_settings.value(
"Cache/proxyAuth",
false).toBool();
526bool QtMarbleConfigDialog::systemTimezone()
const
528 return d->m_settings.value(
"Time/systemTimezone",
true).toBool();
531bool QtMarbleConfigDialog::customTimezone()
const
533 return d->m_settings.value(
"Time/customTimezone",
false).toBool();
536bool QtMarbleConfigDialog::UTC()
const
538 return d->m_settings.value(
"Time/UTC",
false).toBool();
541bool QtMarbleConfigDialog::systemTime()
const
543 return d->m_settings.value(
"Time/systemTime",
true).toBool();
546bool QtMarbleConfigDialog::lastSessionTime()
const
548 return d->m_settings.value(
"Time/lastSessionTime",
false).toBool();
551int QtMarbleConfigDialog::chosenTimezone()
const
553 return d->m_settings.value(
"Time/chosenTimezone", 0).toInt();
556void QtMarbleConfigDialog::initializeCustomTimezone()
558 if (d->m_timezone.isEmpty()) {
559 d->m_timezone.insert(0, 0);
560 d->m_timezone.insert(1, 3600);
561 d->m_timezone.insert(2, 7200);
562 d->m_timezone.insert(3, 7200);
563 d->m_timezone.insert(4, 10800);
564 d->m_timezone.insert(5, 12600);
565 d->m_timezone.insert(6, 14400);
566 d->m_timezone.insert(7, 18000);
567 d->m_timezone.insert(8, 19800);
568 d->m_timezone.insert(9, 21600);
569 d->m_timezone.insert(10, 25200);
570 d->m_timezone.insert(11, 28800);
571 d->m_timezone.insert(12, 32400);
572 d->m_timezone.insert(13, 34200);
573 d->m_timezone.insert(14, 36000);
574 d->m_timezone.insert(15, 39600);
575 d->m_timezone.insert(16, 43200);
576 d->m_timezone.insert(17, -39600);
577 d->m_timezone.insert(18, -36000);
578 d->m_timezone.insert(19, -32400);
579 d->m_timezone.insert(20, -28800);
580 d->m_timezone.insert(21, -25200);
581 d->m_timezone.insert(22, -25200);
582 d->m_timezone.insert(23, -21600);
583 d->m_timezone.insert(24, -18000);
584 d->m_timezone.insert(25, -18000);
585 d->m_timezone.insert(26, -14400);
586 d->m_timezone.insert(27, -12600);
587 d->m_timezone.insert(28, -10800);
588 d->m_timezone.insert(29, -10800);
589 d->m_timezone.insert(30, -3600);
593bool QtMarbleConfigDialog::syncEnabled()
const
595 return d->m_settings.value(
"CloudSync/enableSync",
false).toBool();
598QString QtMarbleConfigDialog::syncBackend()
const
600 return d->m_settings.value(
"CloudSync/syncBackend", {}).
toString();
603bool QtMarbleConfigDialog::syncBookmarks()
const
605 return d->m_settings.value(
"CloudSync/syncBookmarks",
true).toBool();
608bool QtMarbleConfigDialog::syncRoutes()
const
610 return d->m_settings.value(
"CloudSync/syncRoutes",
true).toBool();
613QString QtMarbleConfigDialog::owncloudServer()
const
615 return d->m_settings.value(
"CloudSync/owncloudServer", {}).
toString();
618QString QtMarbleConfigDialog::owncloudUsername()
const
620 return d->m_settings.value(
"CloudSync/owncloudUsername", {}).
toString();
623QString QtMarbleConfigDialog::owncloudPassword()
const
625 return d->m_settings.value(
"CloudSync/owncloudPassword", {}).
toString();
630#include "moc_QtMarbleConfigDialog.cpp"
This file contains the headers for MarbleModel.
void stop(Ekos::AlignState mode)
Q_SCRIPTABLE CaptureState status()
char * toString(const EngineQuery &query)
Binds a QML item to a specific geodetic location in screen coordinates.
@ HttpProxy
Uses an Http proxy.
@ Socks5Proxy
Uses a Socks5Proxy.
AngleUnit
This enum is used to choose the unit chosen to measure angles.
@ DMSDegree
Degrees in DMS notation.
@ KeepAxisVertically
Keep planet axis vertically.
@ ShowHomeLocation
Show home location on startup.
@ LastLocationVisited
Show last location visited on quit.
@ Native
Display the name in the official language and glyphs of the labeled place.
MapQuality
This enum is used to choose the map quality shown in the view.
@ HighQuality
High quality (e.g. antialiasing for lines)
@ LowQuality
Low resolution (e.g. interlaced)
void setTimeSpec(Qt::TimeSpec spec)
QDateTime currentDateTime()
QDateTime currentDateTimeUtc()
QDateTime toLocalTime() const const
void setApplicationProxy(const QNetworkProxy &networkProxy)
void setHostName(const QString &hostName)
void setPassword(const QString &password)
void setPort(quint16 port)
void setType(QNetworkProxy::ProxyType type)
void setUser(const QString &user)
QString arg(Args &&... args) const const
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)