Projects/Marble/MarbleMarbleWidget

< Projects‎ | Marble
Revision as of 21:51, 5 July 2010 by Tackat (Talk | contribs)

Jump to: navigation, search


Editing Projects/Marble/MarbleCPlusPlus

MarbleWidget: Changing basic map properties
Tutorial Series   Marble C++ Tutorial
Previous   C++, Qt
What's Next   Tutorial 3 - Marble's GeoPainter
Further Reading   n/a


Creating a weather map

Now we want to modify the map:

Again MarbleWidget provides a convenient way to make changes to the overall look and feel of the map:

We'd like to display a small weather map. So we turn on the satellite view, enable the clouds and enable the country border lines.

By default Marble shows a few info boxes: Overview Map, Compass and ScaleBar. Due to the limited size we want to shrink the compass. We turn the Overview Map and the ScaleBar off. In the source code the class AbstractFloatItem is used to display Info Boxes:

  1. include <QtGui/QApplication>
  1. include <marble/global.h>
  2. include <marble/MarbleWidget.h>
  3. include <marble/AbstractFloatItem.h>

using namespace Marble;

int main(int argc, char** argv) {

   QApplication app(argc,argv);
   // Create a Marble QWidget without a parent
   MarbleWidget *mapWidget = new MarbleWidget();
   // Load the OpenStreetMap map
   mapWidget->setMapThemeId("earth/bluemarble/bluemarble.dgml");
   mapWidget->setProjection( Mercator ); 
   
   // Enable the cloud cover and enable the country borders
   mapWidget->setShowClouds( true );
   mapWidget->setShowBorders( true );
   
   // Hide the FloatItems: Compass and StatusBar
   mapWidget->setShowOverviewMap(false);
   mapWidget->setShowScaleBar(false);
   
   foreach ( AbstractFloatItem * floatItem, mapWidget->floatItems() )
       if ( floatItem && floatItem->nameId() == "compass" ) {
           
           // Put the compass onto the left hand side
           floatItem->setPosition( QPoint( 10, 10 ) );
           // Make the content size of the compass smaller
           floatItem->setContentSize( QSize( 50, 50 ) );
       }
   
   mapWidget->resize( 400, 300 );
   mapWidget->show();
   return app.exec();

}

Save the code above as my_marble.cpp and compile it:

g++ -I /usr/include/qt4/ -o my_marble my_marble.cpp -lmarblewidget -lQtGui

If things go fine, execute ./my_marble and you end up with a fully usable OpenStreetMap application: My marble.png

Here's a little checklist to tackle some problems that might arise when compiling the code above:

  • You need Qt and Marble development packages (or comparable SVN installations)
  • If Qt headers are not installed in /usr/include/qt4 on your system, change the path in the g++ call above accordingly.
  • Likewise, add -I /path/to/marble/headers if they're not to be found in /usr/include

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal