Suite

Comment sélectionner une fonctionnalité avec le clic de souris par programmation


Je travaille en c++/QT 4.8.5 et l'api c++ qgis 2.8.2

Dans mon application, j'avais la couche de sélection supérieure avec le bouton de la souris pour obtenir la valeur de l'attribut et l'afficher dans une fenêtre contextuelle

Je vois dans la documentation en ligne de l'api qu'il y a deux classes :

QgsMapToolIdentifyFeature et QgsMapToolIdentify

puis-je utiliser l'un d'eux pour faire ce que je veux faire dans mon application ou il y en a un autre pour le faire ?


Après avoir cherché dans stackexchange, sur le web, et dans le livre "building mapping application with QGis", et essayer de comprendre voici une solution simple que vous pouvez utiliser si vous le souhaitez c'est un petit exemple d'utilisation Dans mon application, je charge un fichier de carte S57, lorsque j'active la fonction selectionLayer via le bouton maptool, à chaque fois que je clique sur la carte, le dernier qdebug affiche toutes les informations dont j'ai besoin

le code :

mIdentify =nouveau QgsMapToolIdentify(mpMapCanvas); mIdentifier->activer(); //struct IdentifierRésultat *lStructResult; QList < QgsMapToolIdentify::IdentifyResult > lResultList; lResultList.append(mIdentify->identify(lCoord.x(),lCoord.y(),QgsMapToolIdentify::TopDownStopAtFirst, QgsMapToolIdentify::VectorLayer)); qDebug() << "size identifier Qlist =" << lResultList.size(); // récupère la structure QgsMapToolIdentify::IdentifyResult lStructResult = lResultList.at(0); // récupère la couche de la carte à partir de la structure QgsMapLayer *lMapLayer = lStructResult.mLayer; // récupère la fonctionnalité à partir de la structure QgsFeature lFeature = lStructResult.mFeature; // obtient l'étiquette QString lLabel = lStructResult.mLabel; qDebug() << " Label = " << lLabel << " lFeatureId = " << lFeature.id() << " MapLayerName = " << lMapLayer->name();

c'est un exemple de code de test, il n'y a pas de vérification si la QList est vide


Voir la vidéo: Hiiri simulaattori #2 talo on iso (Octobre 2021).