Difference between revisions of "Projects/Marble/MarbleMarbleWidget"

Jump to: navigation, search
(Creating a weather map)
(Creating a weather map)
Line 17: Line 17:
 
Again [http://api.kde.org/4.x-api/kdeedu/marble/classMarble_1_1MarbleWidget.html MarbleWidget] provides a convenient way to make these changes to the overall look and feel of the map.
 
Again [http://api.kde.org/4.x-api/kdeedu/marble/classMarble_1_1MarbleWidget.html MarbleWidget] provides a convenient way to make these changes to the overall look and feel of the map.
  
By default Marble shows a few info boxes: Overview Map, Compass and ScaleBar. But the size for the widget is very limited. Therefore we want to shrink the compass. And we want to get rid of all the clutter, so we turn off the Overview Map and the ScaleBar. In the source code the class [http://api.kde.org/4.x-api/kdeedu/marble/classMarble_1_1AbstractFloatItem.html AbstractFloatItem] is used to display all kinds of Info Boxes. All the Info Boxes are derived from the AbstractFloatItem class. So we get a list of all the float items that are known to MarbleWidget and we go through it. Once we reach the float item which has got the name id "compass" we make all the changes we want to do:  
+
By default Marble shows a few info boxes: '''Overview Map''', '''Compass''' and '''ScaleBar'''. But the size for the widget is very limited. Therefore we want to shrink the compass. And we want to get rid of all the clutter, so we turn off the Overview Map and the ScaleBar. In the source code the class [http://api.kde.org/4.x-api/kdeedu/marble/classMarble_1_1AbstractFloatItem.html AbstractFloatItem] is used to display all kinds of '''Info Boxes'''. All the Info Boxes are derived from the AbstractFloatItem class. Now we get a list of all the float items that are known to MarbleWidget and we go through it. Once we reach the float item which has got the name id "compass" we make all the changes we want to it:  
  
 
<code cppqt>
 
<code cppqt>

Revision as of 00:50, 6 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


Creating a weather map

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

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

By default Marble shows a few info boxes: Overview Map, Compass and ScaleBar. But the size for the widget is very limited. Therefore we want to shrink the compass. And we want to get rid of all the clutter, so we turn off the Overview Map and the ScaleBar. In the source code the class AbstractFloatItem is used to display all kinds of Info Boxes. All the Info Boxes are derived from the AbstractFloatItem class. Now we get a list of all the float items that are known to MarbleWidget and we go through it. Once we reach the float item which has got the name id "compass" we make all the changes we want to it:

  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 marble_weather.cpp and compile it:

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

If things go fine, execute ./marble_weather and you end up with a map application that displays clouds on top of a flat map: Marble weather.png


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