C++ Qt-Qml,将映射(OSM-Mapbox-Mapboxgl)嵌入到QQuickWidget C++;对象,在iOS上
我正在开发一个必须显示地理地图的跨平台移动应用程序。然后我们使用QT框架(Qt 5.9),并且主要实现部分是在C++中。 Qt已经准备好使用QML中可用的映射对象。然后,我发现集成map视图的最佳方法是将QML代码加载到QQuickWidget中 下面的代码在MacOS桌面上运行良好,但在iOS上部署时,我仍然得到一个空白视图 map.qmlC++ Qt-Qml,将映射(OSM-Mapbox-Mapboxgl)嵌入到QQuickWidget C++;对象,在iOS上,c++,ios,qt,qml,C++,Ios,Qt,Qml,我正在开发一个必须显示地理地图的跨平台移动应用程序。然后我们使用QT框架(Qt 5.9),并且主要实现部分是在C++中。 Qt已经准备好使用QML中可用的映射对象。然后,我发现集成map视图的最佳方法是将QML代码加载到QQuickWidget中 下面的代码在MacOS桌面上运行良好,但在iOS上部署时,我仍然得到一个空白视图 map.qml import QtQuick 2.0 import QtQuick.Controls 1.4 import QtLocation 5.9 import Q
import QtQuick 2.0
import QtQuick.Controls 1.4
import QtLocation 5.9
import QtPositioning 5.5
Map {
id: map
plugin: Plugin {
name: "mapboxgl"
PluginParameter { name: "mapboxgl.access_token"; value: "***" }
}
center: QtPositioning.coordinate(60.170448, 24.942046) // Helsinki
zoomLevel: 8
width: 500 // no effects since it will be resized
height: 500 // no effects since it will be resized
gesture.enabled: true
Component.onCompleted: {
console.log("Dimensions: ", width, height) // print 500 500 whether or not the map is displayed
}
}
viewport.cpp
Viewport::Viewport(QWidget *parent) : QWidget(parent),
_engine(new QQmlEngine(this)),
_mapview(new QQuickWidget(_engine,this)),
_toolbar(new Toolbar(this)) // subclass of QWidget
{
_mapview->setSource(QUrl("qrc:/map.qml"));
_mapview->setResizeMode(QQuickWidget::SizeRootObjectToView);
}
注:
在qt资源文件的根目录下正确声明,以便移动设备可以访问它。我知道mapboxgl插件在Qt5.9上是非常新的,无论我使用什么插件(osm、mapbox、mapboxgl),我总是在iOS上看到一个空白视图,没有错误消息map.qml
- 运行简单示例项目时,mapboxgl插件的警告消息类似于
。尽管Qt说mapboxgl QML插件支持iOS,但它支持iOSssl握手失败
类继承自QWidget,不与任何ui文件关联,视口
和\u mapview
几何图形都是手动管理的。目前还没有重叠的小部件,它们都是完全不透明的。尽管如此,我还是试图设置/取消设置几个OpenGL属性(\u工具栏
,Qt::AA_UseOpenGLES
等),但仍然没有这样做Qt::AA_ShareOpenGLContexts
- 最后一点注意:将上述代码的映射替换为一个简单的红色矩形,上面有一个文本,效果很好
我的问题我做错了什么?我在文档中遗漏了什么吗?没有任何信息表明iOS无法支持这些映射qml对象。这似乎是由于Qt 5.9.0的iOS SSL套接字处理中的错误造成的- 尝试使用osm highdpi tiles或mapboxgl时,我在调试输出中看到“SSL握手失败”
我打开了在线安装程序,添加了Qt 5.9.1 iOS,在下载时稍等片刻,然后将项目重新配置为5.9.1 iOS,然后它就工作了。我更新到Qt 5.9.1,我没有注意到“SSL握手失败”消息是否消失了。虽然我能够在一个新的普通QML应用程序项目中获得地图。但在我的项目中,地图并没有嵌入到QQuickWidget中。