Marble/MarbleMarbleWidget: Difference between revisions

From KDE TechBase
Line 15: Line 15:
Now we want to modify the map:
Now we want to modify the map:


Again [http://api.kde.org/4.x-api/kdeedu/marble/classMarble_1_1MarbleWidget.html MarbleWidget] provides a convenient way to make changes to the overall look and feel:
Again [http://api.kde.org/4.x-api/kdeedu/marble/classMarble_1_1MarbleWidget.html 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 switch on the satellite view, enable the clouds and enable the border lines.


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.


<code cppqt>
<code cppqt>
#include <QtGui/QApplication>
#include <QtGui/QApplication>


Line 58: Line 56:
             floatItem->setContentSize( QSize( 50, 50 ) );
             floatItem->setContentSize( QSize( 50, 50 ) );
         }
         }
       
   
    mapWidget->resize( 400, 300 );
     mapWidget->show();
     mapWidget->show();



Revision as of 20:43, 5 July 2010


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


Making changes to the 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.

  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:

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