QGeoRoutingManager 类

QGeoRoutingManager 类提供对地理路径操作的支持。更多...

头文件 #include <QGeoRoutingManager>
qmakeQT += location
继承 QObject

公共函数

虚拟~QGeoRoutingManager()
QGeoRouteReply *calculateRoute(const QGeoRouteRequest &request)
QLocalelocale() const
QStringmanagerName() const
intmanagerVersion() const
QLocale::MeasurementSystemmeasurementSystem() const
voidsetLocale(const QLocale &locale)
voidsetMeasurementSystem(QLocale::MeasurementSystem system)
QGeoRouteRequest::FeatureTypessupportedFeatureTypes() const
QGeoRouteRequest::FeatureWeightssupportedFeatureWeights() const
QGeoRouteRequest::ManeuverDetailssupportedManeuverDetails() const
QGeoRouteRequest::RouteOptimizationssupportedRouteOptimizations() const
QGeoRouteRequest::SegmentDetailssupportedSegmentDetails() const
QGeoRouteRequest::TravelModessupportedTravelModes() const
QGeoRouteReply *updateRoute(const QGeoRoute &route, const QGeoCoordinate &position)

信号

voiderrorOccurred(QGeoRouteReply *reply, QGeoRouteReply::Error error, const QString &errorString = QString())
voidfinished(QGeoRouteReply *reply)

详细描述

calculateRoute() 和 updateRoute() 方法为 QGeoRouteReply 对象工作,这些对象管理这些操作并报告操作的结果和可能发生的任何错误。

calculateRoute() 函数用于找到遵循一组航路点并匹配各种其他标准(标准)的路径(或路径)。使用 QGeoRouteRequest 类来指定此信息。

如果supportsRouteUpdates()返回true,则QGeoRoutingManager支持根据位置更新更新路线信息。这将导致旅行时间和距离估计更新,并且任何已经走过的QGeoRouteSegments将从这个路线上移除。

可以通过updateRoute()函数触发更新,它使用QGeoPositionInfo实例,这些实例由QGeoPositionInfoSource作为位置更新发出。

可以通过QGeoServiceProvider::routingManager()访问QGeoRoutingManager实例。

以下是QGeoRoutingManager和QGeoRouteRequests的使用示例。

class RouteHandler : public QObject
{
    Q_OBJECT
public:
    RouteHandler(QGeoRoutingManager *routingManager,
                   const QGeoCoordinate &origin,
                   const QGeoCoordinate &destination) {

        QGeoRouteRequest request(origin, destination);

        // The request defaults to the fastest route by car, which is
        // equivalent to:
        // request.setTravelMode(QGeoRouteRequest::CarTravel);
        // request.setRouteOptimization(QGeoRouteRequest::FastestRoute);

        request.setAvoidFeatureTypes(QGeoRouteRequest::AvoidTolls);
        request.setAvoidFeatureTypes(QGeoRouteRequest::AvoidMotorPoolLanes);

        QGeoRouteRequest::AvoidFeaturesTypes avoidableFeatures = routingManager->supportedAvoidFeatureTypes();

        if (!(avoidableFeatures & request.avoidFeatureTypes())) {
            // ... inform the user that the routing manager does not
            // provide support for avoiding tolls and/or motor pool lanes ...
            return;
        }

        QGeoRouteReply *reply = routingManager->calculateRoute(request);

        if (reply->isFinished()) {
            if (reply->error() == QGeoRouteReply::NoError) {
                routeCalculated(reply);
            } else {
                routeError(reply, reply->error(), reply->errorString());
            }
            return;
        }

        connect(routingManager, &QGeoRoutingManager::finished,
                this, &RouteHandler::routeCalculated);

        connect(routingManager, &QGeoRoutingManager::errorOccurred,
                this, &RouteHandler::routeError);
    }

private slots:
    void routeCalculated(QGeoRouteReply *reply)
    {
        // A route request can ask for several alternative routes ...
        if (reply->routes().size() != 0) {

            // ... but by default it will only get a single route
            QGeoRoute route = reply->routes().at(0);

            //... now we have to make use of the route ...
        }

        reply->deleteLater();
    }

    void routeError(QGeoRouteReply *reply, QGeoRouteReply:Error error, const QString &errorString)
    {
        // ... inform the user that an error has occurred ...
        reply->deleteLater();
    }
};

成员函数文档

[虚函数 non-throwable] QGeoRoutingManager::~QGeoRoutingManager()

销毁此管理器。

QGeoRouteReply *QGeoRoutingManager::calculateRoute(const QGeoRouteRequest &request)

开始计算request指定的路线。

将返回QGeoRouteReply对象,该对象可用于管理路由操作和返回操作结果。

此管理器和返回的QGeoRouteReply对象会发出信号,指示操作是否完成或是否发生错误。

一旦操作完成,可以使用QGeoRouteReply::routes检索计算出的路线或路线。

如果request包含此管理器不支持的功能,如此管理器中方法所示,则将发生QGeoRouteReply::UnsupportedOptionError

用户负责删除返回的回复对象,尽管可以在连接到QGeoRoutingManager::finished()、QGeoRoutingManager::errorOccurred()、QGeoRouteReply::finished()或QGeoRouteReply::errorOccurred()的槽中调用deleteLater()。

[信号] void QGeoRoutingManager::errorOccurred(QGeoRouteReply *reply, QGeoRouteReply::Error error, const QString &errorString = QString())

当检测到处理reply时发生错误时,发出此信号。可能随后会发出QGeoRoutingManager::finished()信号。

错误将由错误代码error描述。如果不为空,则errorString将包含错误的文本描述。

此信号和QGeoRouteReply::errorOccurred()将同时发出。

注意:不要在连接到此信号的槽中删除reply对象。请改用deleteLater()。

[信号] void QGeoRoutingManager::finished(QGeoRouteReply *reply)

reply处理完成时发出此信号。

如果reply::error()等于QGeoRouteReply::NoError,则处理成功完成。

此信号和 QGeoRouteReply::finished() 将同时发出。

注意:不要在连接到此信号的槽中删除reply对象。请改用deleteLater()。

QLocale QGeoRoutingManager::locale() const

返回用于提示此路线管理器关于使用何种语言进行地址和说明的区域的区域设置。

另请参阅 setLocale()。

QString QGeoRoutingManager::managerName() const

返回实现此路线管理器行为的引擎的名称。

managerName()和managerVersion()的组合应该在插件实现中是唯一的。

int QGeoRoutingManager::managerVersion() const

返回实现此路线管理器行为的引擎的版本。

managerName()和managerVersion()的组合应该在插件实现中是唯一的。

QLocale::MeasurementSystem QGeoRoutingManager::measurementSystem() const

返回此管理器使用的测量系统。

如果已调用setMeasurementSystem(),则此函数返回的值可能与locale()和measurementSystem()返回的值不同。在这种情况下,此函数返回的值将用于管理器。

另请参阅 setMeasurementSystem() 和 setLocale()。

void QGeoRoutingManager::setLocale(const QLocale &locale)

将此管理器使用的区域设置为locale

如果此路线管理器支持返回不同语言的地址和说明,它们将以locale的语言返回。

如果未设置区域,默认为系统区域。

另请参阅 locale()。

void QGeoRoutingManager::setMeasurementSystem(QLocale::MeasurementSystem system)

将此管理器使用的测量系统设置为system

测量系统可以独立于区域设置。在任何时候只能调用一次setLocale()或者此函数,最终将由最后一次调用的值被使用。

另请参阅 measurementSystem(),locale() 和 setLocale()。

QGeoRouteRequest::FeatureTypes QGeoRoutingManager::supportedFeatureTypes() const

返回管理器在路线规划期间会考虑的功能类型。

QGeoRouteRequest::FeatureWeights QGeoRoutingManager::supportedFeatureWeights() const

返回管理器在路线规划期间对不同功能可以应用的权重。

QGeoRouteRequest::ManeuverDetails QGeoRoutingManager::supportedManeuverDetails() const

返回该管理器可以请求的导航操纵动作的详细级别。

QGeoRouteRequest::RouteOptimizations QGeoRoutingManager::supportedRouteOptimizations() const

返回此管理器支持的路由优化。

QGeoRouteRequest::SegmentDetails QGeoRoutingManager::supportedSegmentDetails() const

返回可以使用此管理器请求的路由段详细级别的层次。

QGeoRouteRequest::TravelModes QGeoRoutingManager::supportedTravelModes() const

返回此管理器支持的旅行模式。

QGeoRouteReply *QGeoRoutingManager::updateRoute(const QGeoRoute &route, const QGeoCoordinate &position)

开始根据当前位置 position 更新 route 的过程。

将返回QGeoRouteReply对象,该对象可用于管理路由操作和返回操作结果。

此管理器和返回的QGeoRouteReply对象会发出信号,指示操作是否完成或是否发生错误。

如果 supportsRouteUpdates() 返回 false,则会发生 QGeoRouteReply::UnsupportedOptionError

一旦操作完成,可以使用 QGeoRouteReply::routes 获取更新后的路线。

返回的路线可能完全不同于原始路线,尤其是如果 position 远离初始路线。否则,路线将相似,但剩余时间和距离将更新,并将删除已经穿过的原始路线的任何段。

用户负责删除返回的回复对象,尽管可以在连接到QGeoRoutingManager::finished()、QGeoRoutingManager::errorOccurred()、QGeoRouteReply::finished()或QGeoRouteReply::errorOccurred()的槽中调用deleteLater()。

© 2024 Qt 公司有限。此处包含的文档贡献是各自所有者的版权。此处提供的文档根据免费软件基金会的许可条款以 GNU 自由文档许可证第 1.3 版 许可。Qt 及其相关标志是芬兰的 Qt 公司和其他国家/地区的商标。所有其他商标均为各自所有者的财产。