Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-Qml,将映射(OSM-Mapbox-Mapboxgl)嵌入到QQuickWidget C++;对象,在iOS上_C++_Ios_Qt_Qml - Fatal编程技术网

C++ Qt-Qml,将映射(OSM-Mapbox-Mapboxgl)嵌入到QQuickWidget C++;对象,在iOS上

C++ 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

我正在开发一个必须显示地理地图的跨平台移动应用程序。然后我们使用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 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);
}
注:

  • map.qml
    在qt资源文件的根目录下正确声明,以便移动设备可以访问它。我知道mapboxgl插件在Qt5.9上是非常新的,无论我使用什么插件(osm、mapbox、mapboxgl),我总是在iOS上看到一个空白视图,没有错误消息
  • 运行简单示例项目时,mapboxgl插件的警告消息类似于
    ssl握手失败
    。尽管Qt说mapboxgl QML插件支持iOS,但它支持iOS
  • 视口
    类继承自QWidget,不与任何ui文件关联,
    \u mapview
    \u工具栏
    几何图形都是手动管理的。目前还没有重叠的小部件,它们都是完全不透明的。尽管如此,我还是试图设置/取消设置几个OpenGL属性(
    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中。