C++ 如何将QtWebkit与地理定位一起使用?
通过C++ 如何将QtWebkit与地理定位一起使用?,c++,qt,geolocation,qtwebkit,qwebview,C++,Qt,Geolocation,Qtwebkit,Qwebview,通过QWebView,可以在桌面应用程序中使用地理定位 我试过了,但没有成功 我试过了,但答案在QT API上,我相信可以通过某种方式自定义“事件”,就像使用qwebkitplatformplugin自定义qtwebkit的一些功能一样(多选项、通知、触觉、触摸交互、全屏视频播放器和拼写检查) 我尝试设置用户授予的权限,但不起作用: void WebPage::permissionRequested(QWebFrame* frame, Feature feature) { switc
QWebView
,可以在桌面应用程序中使用地理定位
- 我试过了,但没有成功
- 我试过了,但答案在QT API上,我相信可以通过某种方式自定义“事件”,就像使用
自定义qwebkitplatformplugin
的一些功能一样(多选项、通知、触觉、触摸交互、全屏视频播放器和拼写检查)qtwebkit
void WebPage::permissionRequested(QWebFrame* frame, Feature feature)
{
switch (feature) {
case Geolocation:
qDebug() << "GEO-Location: PermissionGrantedByUser";
setFeaturePermission(frame, feature, PermissionGrantedByUser);
break;
default:
qDebug() << "";
}
}
我相信我必须构建一个库并将其放入qtDir/compiler/plugins/position
文件夹,但不知道从何开始
我该怎么做
或者,是否可以定制事件并发送第三方库的坐标(我没有要求提供库,也没有要求提供javascript中的替代方案),以响应navigator.geolocation.getCurrentPosition
额外信息关于 如果在调试模式下使用
QT\u DEBUG\u PLUGINS=1
,应用程序输出将返回此值(请注意,第一行由WebPage::permissionRequested
生成):
你是自己建立qt的吗?如果是,您能否在构建期间添加
-DENABLE\u GEOLOCATION=1
?这是因为在qt source repo中检查了预处理器ENABLE_Geology
。谢谢,我正在使用qt的安装程序(二进制版本),我尝试下载“src”并使用ENABLE_Geology
构建。如果您已经在使用安装程序,请忽略前面的建议。若使用安装程序,我认为标志已经启用。可能是,您可以通过在头文件中搜索来确认。@Kiran头文件来自qtDir/compiler/include
?注意:我使用了QT\u DEBUG\u PLUGINS=1
,这返回了一些详细信息,请参阅我的上一个版本。谢谢警告:我可能会把你开错方向。可能有一个简单的方法
<script>
function displayError(err) {
document.getElementById("geo").innerHTML = ("Error Code: " + err.code +
" / msg: " + err.message);
}
function displayLocation(position) {
document.getElementById("geo").innerHTML = [
"latitude:" + position.coords.latitude,
"longitude:" + position.coords.longitude
].join(", ");
}
function getMyLocation() {
if (navigator.geolocation) {
navigator.geolocation.watchPosition(function(a, b, c) {
console.log(a, b, c);
document.getElementById("geo").innerHTML = "Testando...";
});
navigator.geolocation.getCurrentPosition(displayLocation, displayError, {
enableHighAccuracy: false,
timeout: 10000,
maximumAge: 0
});
} else {
document.getElementById("geo").innerHTML = "No geolocation support";
}
}
window.onload = function() {
getMyLocation();
};
</script>
<div id="geo"></div>
GEO-Location: PermissionGrantedByUser
QFactoryLoader::QFactoryLoader() checking directory path "C:/Qt5.4.0/5.4/mingw491_32/plugins/position" ...
QFactoryLoader::QFactoryLoader() looking at "C:/Qt5.4.0/5.4/mingw491_32/plugins/position/qtposition_positionpoll.dll"
Found metadata in lib C:/Qt5.4.0/5.4/mingw491_32/plugins/position/qtposition_positionpoll.dll, metadata=
{
"IID": "org.qt-project.qt.position.sourcefactory/5.0",
"MetaData": {
"Keys": [
"positionpoll"
],
"Monitor": true,
"Position": false,
"Priority": 1000,
"Provider": "positionpoll",
"Satellite": false
},
"className": "QGeoPositionInfoSourceFactoryPoll",
"debug": false,
"version": 328704
}
"The plugin 'C:/Qt5.4.0/5.4/mingw491_32/plugins/position/qtposition_positionpoll.dll' uses incompatible Qt library. (Cannot mix debug and release libraries.)"
not a plugin
QFactoryLoader::QFactoryLoader() looking at "C:/Qt5.4.0/5.4/mingw491_32/plugins/position/qtposition_positionpolld.dll"
Found metadata in lib C:/Qt5.4.0/5.4/mingw491_32/plugins/position/qtposition_positionpolld.dll, metadata=
{
"IID": "org.qt-project.qt.position.sourcefactory/5.0",
"MetaData": {
"Keys": [
"positionpoll"
],
"Monitor": true,
"Position": false,
"Priority": 1000,
"Provider": "positionpoll",
"Satellite": false
},
"className": "QGeoPositionInfoSourceFactoryPoll",
"debug": true,
"version": 328704
}
Got keys from plugin meta data ("positionpoll")
QFactoryLoader::QFactoryLoader() checking directory path "C:/projects/webview-example/debug/position" ...