Hi, FYI These kind of developers/c++ questions are problably better asked/answered on the QGIS-dev list
I think you also should add some more context, for example: - what exactly are you trying to do? Add a rasterlayer to... what? - which development/Operating system environment are you using for this? - is this a standalone dir applicatio? - is this code somewhere on github so others can have a look? Otherwise this is too open I think, for others to take the time to try to understand and answer. Regards, Richard Duivenvoorde On 7/21/20 1:18 PM, Alireza Ghalavand wrote: > Hello, > > > Qgis Error “Raster layer Cannot instantiate the 'gdal' data provider” in qt > c++ > <https://stackoverflow.com/questions/63010283/qgis-error-raster-layer-cannot-instantiate-the-gdal-data-provider-in-qt-c> > > When I am trying to add a raster layer, I get this error from > QgsRasterLayer::IsValid()!!! Can anybody tell me why this happens!? I am > beginner in qgis, so could you please explain in detail. the first func > "onAddLayer" used for Add button clicked and second func is defined for > adding a raster layer. > > *my code:* > void MainWindow::onAddLayer() > { > const auto path = QFileDialog::getOpenFileName(this, "SELECT GIS MAP > LAYER", QDir( > _lastMapDir).path()); > > if (path.isEmpty() || path.isNull()) > { > return; > } > > addRasterLayer(path); > _lastMapDir = QDir(path).canonicalPath(); > } > > void MainWindow::addRasterLayer(const QFileInfo &info) > { > LOG(QString("adding map layer %1").arg(info.filePath())); > QString errMsg; > > // if (!QgsRasterLayer::isValidRasterFileName(info.filePath(), errMsg)) > // { > // LOG(errMsg); > > // return; > // } > > QScopedPointer<QgsRasterLayer> layer(new QgsRasterLayer(info.filePath(), > info.baseName())); > //layer->setDataProvider("gdal"); // Added by ArGhalavand > > if (!layer->isValid()) > { > LOG(QString("failed to add layer (%1)").arg(layer->error().message( > > QgsErrorMessage::Format::Text))); > > return; > } > > save("last_layer_path", info.filePath(), "gis"); > _rasterProvider = layer->dataProvider(); > _mapCanvas->freeze(true); > auto item = QgsMapCanvasLayer(layer.take(), true); > _mapCanvas->setExtent(item.layer()->extent()); > QgsMapLayerRegistry::instance()->addMapLayer(item.layer(), true); > _mapCanvas->setLayerSet(QList<QgsMapCanvasLayer>() << item); > _mapCanvas->freeze(false); > _mapCanvas->setVisible(true); > _mapCanvas->refresh(); > statusBar()->showMessage(QString("%1 LOADED").arg(info.fileName()), 3000); > } > > *With Best Regards,* > Alireza Ghalavand > > _______________________________________________ > Qgis-user mailing list > Qgis-user@lists.osgeo.org > List info: https://lists.osgeo.org/mailman/listinfo/qgis-user > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user > _______________________________________________ Qgis-user mailing list Qgis-user@lists.osgeo.org List info: https://lists.osgeo.org/mailman/listinfo/qgis-user Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user