QGeoRoutingManager Class

QGeoRoutingManager 类为地理路由操作提供支持。更多

Header: #include <QGeoRoutingManager>
qmake: QT += location
Inherits: QObject

公共函数

virtual ~QGeoRoutingManager()
QGeoRouteReply *calculateRoute(const QGeoRouteRequest &request)
QLocale locale() const
QString managerName() const
int managerVersion() const
QLocale::MeasurementSystem measurementSystem() const
void setLocale(const QLocale &locale)
void setMeasurementSystem(QLocale::MeasurementSystem system)
QGeoRouteRequest::FeatureTypes supportedFeatureTypes() const
QGeoRouteRequest::FeatureWeights supportedFeatureWeights() const
QGeoRouteRequest::ManeuverDetails supportedManeuverDetails() const
QGeoRouteRequest::RouteOptimizations supportedRouteOptimizations() const
QGeoRouteRequest::SegmentDetails supportedSegmentDetails() const
QGeoRouteRequest::TravelModes supportedTravelModes() const
QGeoRouteReply *updateRoute(const QGeoRoute &route, const QGeoCoordinate &position)

信号

void errorOccurred(QGeoRouteReply *reply, QGeoRouteReply::Error error, const QString &errorString = QString())
void finished(QGeoRouteReply *reply)

详细说明

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

calculateRoute() 函数用于查找一条(或多条)路线,该路线遵循一组航点并符合其他各种标准。QGeoRouteRequest 类用于指定这些信息。

如果 supportsRouteUpdates() 返回 true,则 QGeoRoutingManager 支持根据位置更新来更新路线信息。这将导致旅行时间和距离估计值的更新,并从路线中删除任何已穿越的 QGeoRouteSegment。

更新可通过updateRoute() 函数触发,该函数利用QGeoPositionInfoSource 发送的作为位置更新的QGeoPositionInfo 实例。

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

下面是一个使用 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();
    }
};

成员函数文档

[virtual noexcept] 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() 删除。

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

reply 的处理过程中检测到错误时,就会发出该信号。随后可能会发出QGeoRoutingManager::finished() 信号。

错误代码error 将描述该错误。如果errorString 不为空,则将包含错误的文字说明。

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

注意: 请勿删除与此信号连接的槽中的reply 对象。请使用deleteLater() 代替。

[signal] 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() 。

© 2025 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.