Far funzionare QT con QGIS



  • Salve a tutti,
    sono principalmente un programmatore Java, ma ho iniziato molti anni fa lavorando in C++, e di recente il mio responsabile di progetto, sapendo questa cosa, mi ha chiesto di creare una piccola applicazione in QT che possa aprire dei file .shp con QGIS.
    Purtroppo sto incontrando delle difficoltà.

    Ho scaricato i tutorial di Tim Sutton da GitHub (https://github.com/qgis/QGIS-Code-Examples) ed ho cominciato a lavorare su questo (è quello più vicino a ciò che dovrei fare): 4_adding_rasters_to_canvas.

    Mi sono scaricato QGIS con tutti i sorgenti (versione 1.8) e QT4 - avevo provato con QGIS 2.0 e QT5 senza successo, prima di leggere in rete che queste due versioni non sono compatibili, quindi ho deciso di provare a riprodurre l'ambiente originale sotto cui sono stati scritti i tutorial.
    Ho scaricato anche OSGEO4W64 (sto su Win7 64bit) con tutti i sorgenti.

    Ho aperto il progetto sotto QT, e ho modificato il file .pro per aggiungere tutte le cartelle necessarie (sorgenti e librerie).

    Mi sono configurato un kit sotto QT4, usando Microsoft Visual C++ 10.0 come compilatore (l'unico che non mi fa comparire l'icona rossa di errore sulla lista dei kit).

    Ho configurato CMake con il percorso che porta all'eseguibile di CMake 2.8.

    Però quando vado ad eseguire il build del progetto, mi ritornano i seguenti errori:

    @main.obj:-1: error: LNK2019: unresolved external symbol "public: virtual __thiscall QgsApplication::~QgsApplication(void)" (??1QgsApplication@@UAE@XZ) referenced in function _main
    main.obj:-1: error: LNK2019: unresolved external symbol "public: __thiscall QgsApplication::QgsApplication(int &,char * *,bool,class QString)" (??0QgsApplication@@QAE@AAHPAPAD_NVQString@@@Z) referenced in function _main@

    Ho provato molte cose, mi sono letto vari thread su vari forum, e varia documentazione, ma preferirei ripartire da questo punto per essere sicuro di seguire la strada giusta.

    Per cui la mia (prima, per ora) domanda è la seguente: prima di lanciare il build del progetto devo compilare il sorgente QGIS sotto Visual C++?
    Il mio sospetto è che QT abbia bisogno delle dll di qgis...

    Vi ringrazio per l'attenzione.

    Ivan A.



  • Ok, dovrei essere riuscito a risolvere il problema: ho ricompilato i sorgenti QGIS 1.8 con cmake-gui, ed ho riportato i percorsi della cartella di build all'interno del file .pro.
    In questo modo QT vede le librerie.

    Adesso però ho un altro problema.
    Nel tutorial c'è questa linea di codice

    @QgsMapLayerRegistry::instance()->addMapLayer(mypLayer, TRUE);@

    (mypLayer è un QgsRasterLayer*)

    e quando lancio il build mi ritorna il seguente errore:

    @error: LNK2019: unresolved external symbol "public: class QgsMapLayer * __thiscall QgsMapLayerRegistry::addMapLayer(class QgsMapLayer *,bool,bool)"@

    Ho letto che il metodo addMapLayer è deprecato, per cui l'ho sostituito con il metodo addMapLayers (come dice Tim Sutton: http://osgeo-org.1560.x6.nabble.com/Display-raster-layer-on-own-Map-Canvas-td5002935.html ).

    Ho così utilizzato:

    @QgsMapLayerRegistry::instance()->addMapLayers(QList<QgsMapLayer*>() << mypLayer);@

    ma l'errore non va via, anche se cambia leggermente...

    @error: LNK2019: unresolved external symbol "public: class QList<class QgsMapLayer *> __thiscall QgsMapLayerRegistry::addMapLayers(class QList<class QgsMapLayer *>,bool,bool)"@

    Sto sbagliando qualcosa nella sinstassi (ho ripreso da esempi trovati in rete)? Esiste un altro modo per fare la stessa cosa?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.