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 支持根据位置更新来更新路线信息。这将导致预计行车时间和距离的更新,并且已通过的任何 QGeoRouteSegments 将从路线中移除。
可通过updateRoute()函数触发更新,该函数利用QGeoPositionInfoSource 作为位置更新发出的QGeoPositionInfo 实例。
可通过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();
}
};成员函数文档
[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() 来完成。
© 2026 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.