Places (C++)
Overview
概述
The Places API allows users to discover places/points of interest and view details about them such as address and contact information; some places may even have rich content such as images and reviews. The Places API also facilitates management of places and categories, allowing users to save and remove them.
Places API允许用户发现感兴趣的地方/点,并查看有关它们的详细信息,如地址和联系信息;有些地方甚至可能有丰富的内容,如图片和评论。地点API还便于管理地点和类别,允许用户保存和删除它们。
Place Definition
地点定义
A place is a point of interest, it could be a favorite restaurant, a park or someone's home. A QPlace object represents a place by acting as a container for various information about that place.
一个地方是一个兴趣点,它可能是一家最喜欢的餐厅、一个公园或某人的家。QPlace对象通过充当有关该地点的各种信息的容器来表示该地点。
This information can be divided into 2 broad classifications
这些信息可分为两大类
- Details
- Rich content
The place details consist of properties of the place, such as the name, location, contact information and so on. When a place is returned during a search, these details are filled in. Sometimes in order to save bandwidth, there are further details about the place that can be retrieved on an individual place by place basis, if the user is interested. The QPlace::detailsFetched() function can be queried to see if all available details have been fetched, and if not, QPlaceManager::getPlaceDetails() can be used to retrieve them. Precisely which details are populated during a search and which need to be fetched individually may vary from provider to provider. See plugin documentation for more details.
地点详细信息包括地点的属性,如名称、位置、联系信息等。在搜索过程中返回地点时,会填写这些详细信息。有时为了节省带宽,如果用户感兴趣,可以逐个地点检索有关地点的更多详细信息。可以查询QPlace::detailsExched()函数,查看是否已获取所有可用的详细信息,如果没有,可以使用QPlaceManager::getPlaceDetails()来检索它们。在搜索过程中填充哪些详细信息以及需要单独提取哪些详细信息可能因提供商而异。有关更多详细信息,请参阅插件文档。
The rich content of a place consists of items such as images, reviews and editorials. Potentially there may be many rich content items, so they are treated separately from the place details. They can be retrieved in a paged fashion via QPlaceManager::getPlaceContent(). If necessary, the content may be assigned to a place so it can act as a convenient container.
一个地方的丰富内容包括图片、评论和社论等。可能有许多内容丰富的项目,因此它们与地点细节分开处理。它们可以通过QPlaceManager::getPlaceContent()以分页方式检索。如有必要,可以将内容分配到一个地方,这样它就可以作为一个方便的容器。
Common Operations
常见操作
Initializing a Manager
初始化管理器
All places functionality is facilitated by a QPlaceManager instance. One must specify a QGeoServiceProvider in order to create the QPlaceManager
QPlaceManager实例促进了所有位置的功能。必须指定QGeoServiceProvider才能创建QPlaceManager
//The "provider name" is used to select a particular provider
QGeoServiceProvider *provider = new QGeoServiceProvider("provider name");
QPlaceManager *manager = provider->placeManager();
Discovery/Search
发现/搜索
In order to perform a search operation we simply create a QPlaceSearchRequest and set the desired search parameters, such as a search term and search center.
为了执行搜索操作,我们只需创建一个QPlaceSearchRequest并设置所需的搜索参数,如搜索词和搜索中心。
//instantiate request and set parameters
QPlaceSearchRequest searchRequest;
searchRequest.setSearchTerm("ice cream");
searchRequest.setSearchArea(QGeoCircle(QGeoCoordinate(12.34, 56.78)));
//send off a search request
/*QPlaceSearchReply * */ searchReply = manager->search(searchRequest);
//connect a slot to handle the reply
connect(searchReply, &QPlaceSearchReply::finished, this, &RequestHandler::handleSearchReply);
The request is an asynchronous operation so we need a slot to handle the completion of the request. In the handler we check that there are no errors and that our search result type is a place. If so we can then retrieve some of the core details of the place. At the end of the slot, we delete the reply since they are for single use only.
请求是一个异步操作,因此我们需要一个槽来处理请求的完成。在处理程序中,我们检查没有错误,并且我们的搜索结果类型是一个位置。如果是这样,我们可以检索该地点的一些核心细节。在插槽末尾,我们删除了回复,因为它们仅供一次性使用。
void handleSearchReply() {
if (searchReply->error() == QPlaceReply::NoError) {
for (const QPlaceSearchResult &result : searchReply->results()) {
if (result.type() == QPlaceSearchResult::PlaceResult) {
QPlaceResult placeResult = result;
qDebug() << "Name: " << placeResult.place().name();
qDebug() << "Coordinate " << placeResult.place().location().coordinate().toString();
qDebug() << "Street: " << placeResult.place().location().address().street();
qDebug() << "Distance: " << placeResult.distance();
}
}
}
searchReply->deleteLater(); //discard reply
searchReply = nullptr;
}
Note: Depending upon the plugin backend that was chosen, the search results may contain places which have further details that can be fetched on a place by place basis. To fetch these other details see Fetching Place Details.
注意:根据所选的插件后端,搜索结果可能包含具有更多详细信息的地点,这些详细信息可以逐个地点获取。要获取这些其他详细信息,请参阅获取地点详细信息。
Recommendations
建议
Recommendations can be retrieved by supplying a place id via QPlaceSearchRequest::setRecommendationId(). Any places similar to the given place are retrieved.
通过QPlaceSearchRequest::setRecommendationId()提供地点id,可以检索推荐。检索与给定位置相似的任何位置。
Paging
分页
If the plugin supports paging, the limit parameter may be provided to the search request.
如果插件支持分页,则可以向搜索请求提供限制参数。
QPlaceSearchRequest searchRequest;
searchRequest.setLimit(15); //specify how many results are to be retrieved.
Fetching Place Details
获取地点详细信息
A place that has been returned from a search request may have more details that can be fetched. The following demonstrates how to check if there are further details and if so how to request them.
从搜索请求返回的位置可能有更多可以获取的详细信息。下面演示了如何检查是否有更多详细信息,如果有,如何请求。
if (!place.detailsFetched()) {
/*QPlaceDetailsReply * */ detailsReply = manager->getPlaceDetails(place.placeId());
connect(detailsReply, &QPlaceDetailsReply::finished, this, &RequestHandler::handleDetailsReply);
}
...
...
void handleDetailsReply() {
QPlace place;
if (detailsReply->error() == QPlaceReply::NoError)
place = detailsReply->place();
detailsReply->deleteLater(); //discard reply
detailsReply = nullptr;
}
Fetching Rich Content
获取丰富的内容
Rich content such as images and reviews is retrieved through the manager and then if required assigned to a place.
通过管理器检索图像和评论等丰富内容,然后根据需要分配到一个地方。
QPlaceContentRequest request;
request.setContentType(QPlaceContent::ImageType);
request.setPlaceId(place.placeId());
request.setLimit(5);
/*QPlaceContentReply * */ contentReply = manager->getPlaceContent(request);
connect(contentReply, &QPlaceContentReply::finished, this, &RequestHandler::handleImagesReply);
We can handle the content request as shown below.
我们可以处理内容请求,如下所示。
void handleImagesReply() {
if (contentReply->error() == QPlaceReply::NoError) {
const auto content = contentReply->content();
for (auto iter = content.cbegin(), end = content.cend(); iter != end; ++iter) {
qDebug() << "Index: " << iter.key();
QPlaceImage image = iter.value();
qDebug() << image.url();
qDebug() << image.mimeType();
}
//alternatively if indexes are irrelevant
for (const QPlaceImage &image : contentReply->content()) {
qDebug() << image.url();
qDebug() << image.mimeType();
}
//we can assign content to the place that it belongs to.
//the place object serves as a container where we can retrieve
//content that has already been fetched
place.insertContent(contentReply->request().contentType(), contentReply->content());
place.setTotalContentCount(contentReply->request().contentType(), contentReply->totalCount());
}
contentReply->deleteLater();
contentReply = nullptr;
}
It is important to note that the results in the QPlaceContentReply, is a QPlaceContent::Collection which is essentially a QMap<int, QPlaceContent>. The key int
in this case is the index of the content, and the value is the content itself. Due to the way Content is implemented it is possible to convert a content type as follows
值得注意的是,QPlaceContentReply中的结果是一个QPlaceContent::Collection,本质上是一个QMap<int,QPlaceContent>。在这种情况下,键int是内容的索引,值是内容本身。由于内容的实现方式,可以按如下方式转换内容类型
QPlaceImage image = content; //provided that 'content' has a type QPlace::ImageType
The usage of the QPlaceContent::Collection and the conversion between content and its subtypes means that code for handling the mechanics of paging reviews, images and editorials can be easily shared.
QPlaceContent::Collection的使用以及内容与其子类型之间的转换意味着可以轻松共享处理分页评论、图像和社论机制的代码。
Search Suggestions
搜索建议
The retrieval of search term suggestions is very similar to performing a place search. A QPlaceSearchRequest is used just like a place search, the only difference being that the search term is set to a partially completed string.
检索搜索词建议与执行地点搜索非常相似。QPlaceSearchRequest的使用方式就像地点搜索一样,唯一的区别是搜索词被设置为部分完成的字符串。
QPlaceSearchRequest request;
request.setSearchTerm("piz");
request.setSearchArea(QGeoCircle(QGeoCoordinate(12.34, 56.78)));
/* QPlaceSearchSuggestion * */suggestionReply = manager->searchSuggestions(request);
connect(suggestionReply, &QPlaceSearchSuggestion::finished, this, &RequestHandler::handleSuggestionReply);
And when the request is done, we can use the reply to show the suggestions.
当请求完成时,我们可以使用回复来显示建议。
void handleSuggestionReply() {
if (suggestionReply->error() == QPlaceReply::NoError) {
for (const QString &suggestion : suggestionReply->suggestions())
qDebug() << suggestion;
}
suggestionReply->deleteLater(); //discard reply
suggestionReply = nullptr;
}
Saving a Place
保存一个地方
The saving of a new place is performed as follows, we create a QPlace instance and populate it with information such as a name, address and coordinate. Once done we can invoke QPlaceManager::savePlace() to begin a save operation.
新地点的保存过程如下,我们创建一个QPlace实例,并用名称、地址和坐标等信息填充它。完成后,我们可以调用QPlaceManager::savePlace()来开始保存操作。
QPlace place;
place.setName( "Fred's Ice Cream Parlor" );
QGeoLocation location;
location.setCoordinate(QGeoCoordinate(12.34, 56.78));
QGeoAddress address;
address.setStreet("111 Nother Street");
...
location.setAddress(address);
place.setLocation(location);
/* QPlaceIdReply * */savePlaceReply = manager->savePlace(place);
connect(savePlaceReply, &QPlaceIdReply::finished, this, &RequestHandler::handleSavePlaceReply);
Once a place is saved the reply contains the new identifier for that place.
一旦保存了一个地点,回复就会包含该地点的新标识符。
void handleSavePlaceReply() {
if (savePlaceReply->error() == QPlaceReply::NoError)
qDebug() << savePlaceReply->id();
savePlaceReply->deleteLater(); //discard reply
savePlaceReply = nullptr;
}
Note that to save an already existing place, the QPlace::placeId() must be filled in with the correct identifier. Otherwise a new place will be created if empty or the wrong place overwritten if the identifier is incorrect.
请注意,要保存已存在的位置,必须用正确的标识符填写QPlace::placeId()。否则,如果为空,将创建一个新位置;如果标识符不正确,将覆盖错误的位置。
When a place is saved, the QPlaceManager may emit QPlaceManager::placedAdded() or QPlaceManager::placeUpdated() signals. However whether a manager does so or not is provider specific, managers accessing places from a web service will typically not emit these signals while managers accessing places locally stored generally will.
保存位置时,QPlaceManager可能会发出QPlaceManager::placedAdded()或QPlaceManager::placeUpdated()信号。然而,管理员是否这样做是特定于提供商的,从web服务访问位置的管理员通常不会发出这些信号,而访问本地存储位置的管理员一般会发出这些信号。
Caveats
警告
The Places API is currently designed for only saving core details. Saving rich content like images and reviews or details like supplier and rating is not a supported use case. Typically a manager will generally ignore these fields upon save and may produce a warning message if they are populated.
Places API当前设计为仅保存核心详细信息。保存图像和评论等丰富内容或供应商和评级等详细信息不受支持。通常,管理员在保存时通常会忽略这些字段,如果它们被填充,可能会产生警告消息。
The Places API only supports saving of the following core details:
Places API仅支持保存以下核心详细信息:
- name
- place id
- location
- contact details
- icon
- categories (tag-like names to describe a place)
- visibility scope
It is possible that providers may only support a subset of these. See the plugin documentation for more details.
提供商可能只支持其中的一个子集。有关更多详细信息,请参阅插件文档。
Saving of properties such as the rating, extended attributes, images, reviews, editorials and supplier is explicitly not supported by the Places API.
Places API明确不支持保存评级、扩展属性、图像、评论、社论和供应商等属性。
Saving Between Managers
管理者之间的保存
When saving places between managers, there are a few things to be aware of. Some fields of a place such as the id, categories and icons are manager specific entities for example the categories in one manager may not be recognized in another. Therefore trying to save a place directly from one manager to another is not possible.
在管理器之间保存位置时,有几件事需要注意。一个地方的一些字段,如id、类别和图标,是特定于管理者的实体,例如一个管理者中的类别可能在另一个管理者身上无法识别。因此,试图从一个管理者直接将一个位置保存到另一个管理者是不可能的。
The typical approach is to use the QPlaceManager::compatiblePlace() function, it creates a copy of a place, but only copies data that the manager supports. Manager specific data such as the place identifier is not copied over. The new copy is now suitable for saving into the manager. If the manager supports matching by alternative identifiers, an alternative identifier attribute is assigned to the copy (see Matching places between managers)
典型的方法是使用QPlaceManager::compatiblePlace()函数,它创建一个位置的副本,但只复制管理器支持的数据。特定于经理的数据,如地点标识符,不会被复制。新副本现在适合保存到管理器中。如果管理器支持通过替代标识符进行匹配,则会为副本分配一个替代标识符属性(请参阅管理器之间的匹配位置)
//result retrieved from a different manager)
QPlace place = manager->compatiblePlace(result.place());
saveReply = manager->savePlace(place);
Removing a Place
删除一个位置
The removal of a place is performed as follows:
移除一个地方的步骤如下:
/* QPlaceIdReply * */removePlaceReply = manager->removePlace(place.placeId());
connect(removePlaceReply, &QPlaceIdReply::finished, this, &RequestHandler::handleRemovePlaceReply);
...
...
void handleRemovePlaceReply() {
if (removePlaceReply->error() == QPlaceReply::NoError)
qDebug() << "Removal of place identified by"
<< removePlaceReply->id() << "was successful";
removePlaceReply->deleteLater(); //discard reply
removePlaceReply = nullptr;
}
When a place is removed, the QPlaceManager may emit the QPlaceManager::placeRemoved() signal. Whether a manager does so is provider specific. Managers accessing places from a web service will typically not emit these signals, while managers accessing places stored locally generally will.
当一个位置被移除时,QPlaceManager可能会发出QPlaceManager::placeRemoved()信号。管理器是否这样做取决于供应商。从web服务访问位置的管理器通常不会发出这些信号,而访问本地存储位置的管理器一般会发出这些信号。
Using Categories
使用类别
Categories are keywords that can describe a place. For example, 'park', 'theater', 'restaurant'. A place could be described by many categories, it could be a park and a music venue and a ferry or bus stop.
类别是可以描述一个地方的关键字。例如,“公园”、“剧院”、“餐厅”。一个地方可以用许多类别来描述,它可以是一个公园、一个音乐场所、一个渡轮或公交车站。
To use categories they must first be initialized.
要使用类别,必须首先对其进行初始化。
/* QPlaceReply * */initCatReply = manager->initializeCategories();
connect(initCatReply, &QPlaceReply::finished, this, &RequestHandler::handleInitCatReply);
...
...
void handleInitCatReply() {
if (initCatReply->error() == QPlaceReply::NoError)
qDebug() << "Categories initialized";
else
qDebug() << "Failed to initialize categories";
initCatReply->deleteLater();
initCatReply = nullptr;
}
After the categories have been initialized we can then use these category functions.
初始化类别后,我们可以使用这些类别函数。
- QPlaceManager::childCategories()
- QPlaceManager::category()
- QPlaceManager::parentCategoryId()
- QPlaceManager::childCategoryIds();
To retrieve the top level categories we use the QPlaceManager::childCategories() function but do not provide a category identifier.
为了检索顶级类别,我们使用QPlaceManager::childCategory()函数,但不提供类别标识符。
const QList<QPlaceCategory> topLevelCategories = manager->childCategories();
for (const QPlaceCategory &category : topLevelCategories)
qDebug() << category.name();
If we did provide an identifier then we could retrieve a category's children.
如果我们确实提供了一个标识符,那么我们就可以检索类别的子类。
QList<QPlaceCategory> childCategories = manager->childCategories(pizza.categoryId());
Saving a Category
保存类别
The following shows how to save a category
下面显示了如何保存类别
QPlaceCategory fastFood;
QPlaceCategory category;
category.setName("pizza");
/*QPlaceIdReply */ saveCategoryReply = manager->saveCategory(category);
connect(saveCategoryReply, &QPlaceIdReply::finished, this, &RequestHandler::handleSaveCategoryReply);
//we could have saved a category as a child by supplying a parent identifier.
saveCategoryReply = manager->saveCategory(category, fastFood.categoryId());
...
...
void handleSaveCategoryReply() {
if (saveCategoryReply->error() == QPlaceReply::NoError) {
qDebug() << "Saved category id =" << saveCategoryReply->id();
}
saveCategoryReply->deleteLater();
saveCategoryReply = nullptr;
}
When a category is saved, the QPlaceManager may emit QPlaceManager::categoryAdded() or QPlaceManager::categoryUpdated() signals. However whether a manager does so or not is provider specific, managers accessing places from a web service will typically not emit these signals while managers accessing places locally stored generally will.
保存类别时,QPlaceManager可能会发出QPlaceManager::categoryAdded()或QPlaceManager::categoryUpdated()信号。然而,管理器是否这样做是特定于提供商的,从web服务访问位置的管理器通常不会发出这些信号,而访问本地存储位置的管理器一般会发出这些信号。
Removing a Category
删除类别
Category removal is very similar to removing a place
类别删除与删除位置非常相似
/* QPlaceIdReply * */removeCategoryReply = manager->removeCategory(place.placeId());
connect(removeCategoryReply, &QPlaceIdReply::finished, this, &RequestHandler::handleRemoveCategoryReply);
...
...
void handleRemoveCategoryReply() {
if (removeCategoryReply->error() == QPlaceReply::NoError)
qDebug() << "Removal of category identified by"
<< removeCategoryReply->id() << "was successful";
removeCategoryReply->deleteLater(); //discard reply
removeCategoryReply = nullptr;
}
When a category is removed, the QPlaceManager may emit the QPlaceManager::categoryRemoved() signal. Whether a manager does so is provider specific. Managers accessing places from a web service will typically not emit these signals, while managers accessing places stored locally generally will.
当一个类别被删除时,QPlaceManager可能会发出QPlaceManager::categoryRemoved()信号。管理器是否这样做取决于供应商。从web服务访问位置的管理器通常不会发出这些信号,而访问本地存储位置的管理器一般会发出这些信号。
Matching Places Between Managers
管理器之间的位置匹配
Sometimes you may want to cross reference whether places from one manager match those from another manager. Such a situation may arise where one manager provides read-only access to places (origin manager) while another second r/w manager (destination manager) is used to save selected favorites from the first. During a search of the origin manager we may want to know which ones have been 'favorited' into the destination manager and perhaps display a customized favorite name rather than the original name.
有时可能想交叉引用一个管理器的位置是否与另一个管理器匹配。可能会出现这样的情况,其中一个管理器提供对位置的只读访问(源管理器),而另一个第二个r/w管理器(目的地管理器)用于保存从第一个管理器中选择的收藏夹。在搜索源管理器时,我们可能想知道哪些已被“收藏”到目标管理器中,并可能显示一个自定义的收藏名称而不是原始名称。
The matching mechanism can vary between managers, but is typically accomplished through an alternative identifier. As part of the save process, the place identifier from the origin manager is saved as an alternative identifier attribute in the destination manager (which can have its own place identifier scheme). In the following example, the origin manager is from the 'here' QGeoServiceProider, therefore as part of the saving process an alternative identifier attribute, x_id_here, is set for the place saved into the destination manager (when QPlaceManager::compatiblePlace() is called)
匹配机制可能因管理器而异,但通常是通过替代标识符来实现的。作为保存处理的一部分,源管理器中的位置标识符将作为替代标识符属性保存在目标管理器中(目标管理器可以有自己的位置标识符方案)。在以下示例中,源管理器来自“here”QGeoServiceProider,因此作为保存过程的一部分,为保存到目标管理器中的位置设置了一个替代标识符属性x_id_here(当调用QPlaceManager::compatiblePlace()时)
origin R/O manager(here) destination R/W manager (places_jsondb)
Save
Place id: ae246 ---> Place id: 0001
Attribute type: x_provider Attribute type: x_id_here
Attribute value: here Attribute text value: ae246
In order to perform the matching, we create a QPlaceMatchRequest and assign it the search results from the origin manager. The QPlaceMatchRequest will be used on the destination manager to return corresponding places. We also specify matching parameters which are key value pairs. As mentioned previously, this can vary depending on the manager but typically the key is QPlaceMatchRequest::AlternativeId to indicate we are matching by alternative id, the value in this case would be x_id_here which specifies which alternative identifier attribute we are using to do the matching.
为了执行匹配,我们创建了一个QPlaceMatchRequest,并将源管理器的搜索结果分配给它。QPlaceMatchRequest将在目标管理器上用于返回相应的地点。我们还指定了匹配参数,这些参数是键值对。如前所述,这可能因管理器而异,但通常键是QPlaceMatchRequest::AlternativeId,表示我们正在通过替代id进行匹配,在这种情况下,值将是x_id_here,它指定我们使用哪个替代标识符属性进行匹配。
QPlaceMatchRequest request;
request.setResults(results);
QVariantMap parameters;
parameters.insert(QPlaceMatchRequest::AlternativeId, "x_id_here");
request.setParameters(parameters);
matchReply = manager->matchingPlaces(request);
...
...
void matchHandler() {
if (matchReply->error() == QPlaceReply::NoError) {
const auto places = matchReply->places();
for (const QPlace &place : places) {
if (place != QPlace())
qDebug() << "Place is a favorite with name" << place.name();
else
qDebug() << "Place is not a favorite";
}
}
matchReply->deleteLater();
matchReply = nullptr;
}
Classes in Places
关于地点的类
Data Classes
数据类
Represents an address of a QGeoLocation 表示QGeoLocation的地址 | |
Represents basic information about a location 表示有关位置的基本信息 | |
Represents a set of data about a place 表示一组关于一个地方的数据 | |
Represents generic attribute information about a place 表示有关地点的通用属性信息 | |
Represents a category that a QPlace can be associated with 表示QPlace可以关联的类别 | |
Represents a contact detail such as a phone number or website url 表示联系人详细信息,如电话号码或网站网址 | |
Holds content about places 保存有关地点的内容 | |
Represents an icon 代表一个图标 | |
Represents a search result containing a proposed search 表示包含建议搜索的搜索结果 | |
Holds rating information about a place 保存某个地方的评级信息 | |
Represents a search result containing a place 表示包含地点的搜索结果 | |
The base class for search results 搜索结果的基类 | |
Represents a supplier of a place or content associated with a place 表示某个地点或与某个地点相关联的内容的供应商 | |
Represents an individual user 代表单个用户 |
Request Classes
请求类
Represents the parameters of a content request 表示内容请求的参数 | |
Used to find places from one manager that match those from another. It represents a set of request parameters 过去常常从一个管理器那里找到与另一个管理器匹配的职位。它表示一组请求参数 | |
Represents the set of parameters for a search request 表示搜索请求的参数集 |
Reply classes
回复类
Manages a content retrieval operation started by an instance of QPlaceManager 管理由QPlaceManager实例启动的内容检索操作 | |
Manages a place details fetch operation started by an instance of QPlaceManager 管理由QPlaceManager实例启动的地点详细信息获取操作 | |
Manages operations which return an identifier such as saving and removal operations of places and categories 管理返回标识符的操作,如地点和类别的保存和删除操作 | |
Manages a place matching operation started by an instance of QPlaceManager 管理由QPlaceManager实例启动的位置匹配操作 | |
Manages an operation started by an instance of QPlaceManager and serves as a base class for more specialized replies 管理由QPlaceManager实例启动的操作,并作为更专业回复的基类 | |
Manages a place search operation started by an instance of QPlaceManager 管理由QPlaceManager实例启动的地点搜索操作 | |
Manages a search suggestion operation started by an instance of QPlaceManager 管理由QPlaceManager实例启动的搜索建议操作 |
Manager Classes
管理器类
The interface which allows clients to access places stored in a particular backend 允许客户端访问存储在特定后端中的位置的接口 | |
Interface for implementers of QGeoServiceProvider plugins who want to provide access to place functionality QGeoServiceProvider插件实现者的接口,他们希望提供对位置功能的访问 |
Maps and Navigation (QML)Places (QML)
© 2024 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.