WebEngine Widgets Mapas Ejemplo
Demuestra cómo gestionar las solicitudes de geolocalización.

Maps muestra cómo gestionar las solicitudes de geolocalización procedentes de QWebEnginePage.
La API de geolocalización es una API de JavaScript que las aplicaciones web pueden utilizar para determinar la ubicación física del usuario y mostrarla en un mapa, por ejemplo. Dado que Qt WebEngine depende del módulo Qt Positioning para alimentar esta API, se necesita un backend de localización viable para la plataforma de destino.
Para evitar el envío accidental de información de localización a terceros, las solicitudes de geolocalización se deniegan por defecto. Este ejemplo muestra los pasos que debe seguir una aplicación para empezar a aceptar estas solicitudes.
Nota: En Windows 11, habilite la configuración para conceder a la aplicación acceso a los servicios de localización de Windows. En la aplicación de configuración, en Privacy & Security > Location, habilite Location services, Let apps access your location y Let desktop apps access your location.
Ejecutar el ejemplo
Para ejecutar el ejemplo desde Qt Creatorabra el modo Welcome y seleccione el ejemplo de Examples. Para más información, consulte Qt Creator: Tutorial: Construir y ejecutar.
El código
El programa de ejemplo consiste en una única clase, MainWindow, que hereda de QMainWindow:
#include <QMainWindow> #include <QWebEngineView> class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); private: QWebEngineView *m_view; };
En el constructor primero configuramos QWebEngineView como widget central:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , m_view(new QWebEngineView(this)) { setCentralWidget(m_view);
A continuación, procedemos a conectar una función lambda a la señal QWebEnginePage::permissionRequested:
QWebEnginePage *page = m_view->page(); connect(page, &QWebEnginePage::permissionRequested, [this](QWebEnginePermission permission) {
Esta señal se emite cada vez que una página web solicita hacer uso de una determinada característica o dispositivo, incluyendo no sólo los servicios de localización, sino también los dispositivos de captura de audio o el bloqueo del ratón, por ejemplo. En este ejemplo sólo gestionamos las peticiones de servicios de localización:
if (permission.permissionType() != QWebEnginePermission::PermissionType::Geolocation) return;
Ahora viene la parte en la que realmente pedimos permiso al usuario:
QMessageBox msgBox(this); msgBox.setText(tr("%1 wants to know your location").arg(permission.origin().host())); msgBox.setInformativeText(tr("Do you want to send your current location to this website?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::Yes); if (msgBox.exec() == QMessageBox::Yes) permission.grant(); else permission.deny(); });
Observe que la pregunta incluye el componente host del URI del sitio web (permission.origin()) para informar al usuario de qué sitio web recibirá exactamente sus datos de localización.
Utilizamos los métodos QWebEnginePermission::grant() y QWebEnginePermission::deny() para comunicar la respuesta del usuario a la página web.
Por último, pedimos a QWebEnginePage que cargue la página web que podría querer utilizar los servicios de localización:
page->load(QUrl(QStringLiteral("https://bing.com/maps"))); }
Véase también Qt WebEngine HTML5 Geolocation.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.