Marble/MarbleMarbleWidget: Difference between revisions
Earthwings (talk | contribs) (Fix code formatting) |
|||
Line 19: | Line 19: | ||
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-apidocs/marble/html/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 (this has been simplified in Marble 0.11.0 where you can access AbstractFloatItems directly via their nameId): | 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-apidocs/marble/html/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 (this has been simplified in Marble 0.11.0 where you can access AbstractFloatItems directly via their nameId): | ||
< | <source lang="cpp-qt"> | ||
#include <QtGui/QApplication> | #include <QtGui/QApplication> | ||
Line 62: | Line 62: | ||
return app.exec(); | return app.exec(); | ||
} | } | ||
</ | </source> | ||
Save the code above as <tt>marble_weather.cpp</tt> and compile it: | Save the code above as <tt>marble_weather.cpp</tt> and compile it: | ||
< | <source lang="bash"> | ||
g++ -I /usr/include/qt4/ -o marble_weather marble_weather.cpp -lmarblewidget -lQtGui | g++ -I /usr/include/qt4/ -o marble_weather marble_weather.cpp -lmarblewidget -lQtGui | ||
</ | </source> | ||
Instead of calling the compiler directly you can also create a [http://doc.trolltech.com/qmake-tutorial.html qmake project file]: | Instead of calling the compiler directly you can also create a [http://doc.trolltech.com/qmake-tutorial.html qmake project file]: |
Revision as of 20:42, 26 June 2011
Editing Projects/Marble/MarbleCPlusPlus
Languages: عربي | Asturianu | Català | Česky | Kaszëbsczi | Dansk | Deutsch | English | Esperanto | Español | Eesti | فارسی | Suomi | Français | Galego | Italiano | 日本語 | 한국어 | Norwegian | Polski | Português Brasileiro | Română | Русский | Svenska | Slovenčina | Slovenščina | српски | Türkçe | Tiếng Việt | Українська | 简体中文 | 繁體中文
Tutorial Series | Marble C++ Tutorial |
Previous | Tutorial 1 - Hello World |
What's Next | Tutorial 3 - Basic interaction with MarbleWidget |
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 (this has been simplified in Marble 0.11.0 where you can access AbstractFloatItems directly via their nameId):
#include <QtGui/QApplication>
#include <marble/global.h>
#include <marble/MarbleWidget.h>
#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
Instead of calling the compiler directly you can also create a qmake project file:
TEMPLATE = app
TARGET = marble_weather
DEPENDPATH += .
INCLUDEPATH += .
SOURCES += marble_weather.cpp
LIBS += -lmarblewidget
Store it as marble_weather.pro in the same directory and call
qmake marble_weather.pro
make
If things go fine, execute ./marble_weather and you end up with a map application that displays clouds on top of a flat map: