Marbleウィジェットを使う

Marbleウィジェットとはあの地球儀ウィンドウのことです。
これはほかのQtウィジェットと同じように自分のアプリケーションに埋め込むことができます。
ここでは最も基本的な使い方を説明します。

2014年時点では、ソースコードからビルドしないとインポートライブラリが作られないようなので、頑張ってビルド->インストールを行う必要があります。
ディスクに余裕があるならデバッグ版とリリース版の両方をインストールしておいたほうがいいでしょう。
また、ソースコードのINSTALLプロジェクトからはインポートライブラリはインストールされないので、手作業でコピーしておく必要があります。

以下では、C:/marble以下にソースコードからコンパイルしたmarbleがインストールされていて、インポートライブラリはmarble/libにコピーしてあるものとします。

付属のサンプルアプリケーションをコンパイル

Marbleのソースコードをダウンロードするとexampleフォルダの中に色々とサンプルコードが含まれています。
とりあえずはhello-marbleをコンパイルしてみましょう。

インクルードパスとインポートライブラリは以下の通りです。

インクルードパス:

    • C:marbleinclude
    • C:Qt5.3msvc2013includeQtWidgets
    • C:Qt5.3msvc2013include
    • C:Qt5.3msvc2013includeQtCore
    • C:Qt5.3msvc2013includeQtGui

インポートライブラリ

以下はリリース版の場合です。
デバッグ版の場合はサフィックス”d”を付けてください(Qt5Cored.lib等)。

marbleおよびQtではデバッグ版/リリース版が異なるとiterator debug levelの不一致でビルドに失敗したりするので気を付けましょう。
また、ビルドには成功してもmarbleのプラグインのロードに失敗するので、白い地図のみが表示されたりします。

    • marblewidget.lib
    • Qt5Core.lib
    • Qt5Widgets.lib
    • qtmain.lib

marbleウィジェットはmarble付属のプラグインディレクトリとデータディレクトリの中身を読み込む必要があります。
このディレクトリは何も設定していない場合は、プログラム本体と同じディレクトリ以下にあるpluginsディレクトリとdataディレクトリに設定されます。
なので、作成するプログラムの保存先ディレクトリをmarbleのインストール先に設定するか、
それが嫌な場合は以下のコードをmarbleウィジェット作成の前に記述します。

#include <marble/MarbleDirs.h>

  MarbleDirs::setMarbleDataPath( "C:/marble/data/" );
  MarbleDirs::setMarblePluginPath("C:/marble/plugins");

メインウィンドウに埋め込んでみる

それでは例によってメインウィンドウにうめこんでみましょう。

まず、デザイナでメインウィンドウを作成し、中央にQtWidgetを配置します。

メインウィンドウ作成

メインウィンドウ作成

続いて、ウィジェットを格上げします。
以下のように設定します。

ウィジェット格上げ

ウィジェット格上げ設定
設定後

ウィジェット格上げ後

ソースコードのほうは以下のようにします。

main.cpp
   1: #include <QApplication>
   2: #include <marble/MarbleDirs.h>
   3: 
   4: #include "WndMain.h"
   5: 
   6: int main(int argc, char** argv)
   7: {
   8:   QApplication app(argc,argv);
   9: 
  10:   Marble::MarbleDirs::setMarbleDataPath( "C:/marble/data/" );
  11:   Marble::MarbleDirs::setMarblePluginPath("C:/marble/plugins");
  12: 
  13:   WndMain wnd;
  14:   wnd.show();
  15: 
  16:   return app.exec();
  17: }
メインウィンドウクラス
   1: #include "WndMain.h"
   2: 
   3: #include <marble/MarbleWidget.h>
   4: #include <marble/MarbleDirs.h>
   5: #include <marble/AbstractFloatItem.h>
   6: #include <marble/global.h>
   7: 
   8: 
   9: WndMain::WndMain()
  10: {
  11:   setupUi( this );
  12: 
  13:   mapWidget->setMapThemeId( "earth/openstreetmap/bluemarble.dgml" );
  14:   mapWidget->setShowBorders( true );
  15:   mapWidget->setShowCompass( true );
  16:   mapWidget->setShowOverviewMap( true );
  17: 
  18:   初期表示の中心座標を指定
  19:   mapWidget->centerOn(
  20:     Marble::GeoDataCoordinates(
  21:       139.833, 36.0, 0.0, Marble::GeoDataCoordinates::Degree )
  22:     );
  23: 
  24: }
  25: 
  26: 
  27: WndMain::~WndMain()
  28: {
  29: }

基本的にはhello-marble.cppの中身の配置を変えただけです。

実行結果

実行結果

ここまでくればあとはmarbleの色々な機能を使って好きなようにアプリケーションを作ることができるでしょう。

アーカイブ