[Marble-devel] Help with MarbleWidget

Sylvain Paré sylvain.pare at gmail.com
Fri Jul 23 09:40:01 CEST 2010


Hi Bryan,

I did not read your code but I am not sure that you are taking a good path
to do that.
For me It looks like you are trying to link your apps against a wrong
version of the desired object,
like note compiled with the same compiler and/or with missing/wrong flag
during the builing process of marble itself.

Christophe do you still have your  snippet of code to do what he want ?

Good luck.

Sylvain

2010/7/23 Bryan Greenway <rbgreenway at gmail.com>

>  Hello,
>
>
>
> I am trying to put the MarbleWidget into a Qt only application using Qt
> Creator, and am having some difficulty.  Here’s is what I’ve done thus far:
>
>
>
> 1.       Followed instructions for downloading and compiling Marble on
> Windows.  That seemed to go fine.
>
>
>
> 2.       I looked at the QtMainWindow.cpp as a model for what I was
> putting together.  I deviated from that approach somewhat as I am creating a
> simple Dialog app.  On this dialog, I am trying  to instantiate a
> ControlView (as is done in QtMainWindow) from ControlView.cpp/.h.  See
> dialog.cpp/.h below.
>
>
>
>
>
> ////////////////////////////////
>
> // dialog.h
>
> #ifndef DIALOG_H
>
> #define DIALOG_H
>
> #include <QDialog>
>
> #include "ControlView.h"
>
> namespace Ui {
>
>     class Dialog;
>
> }
>
> namespace Marble{
>
> class MarbleWidget;
>
> class Dialog : public QDialog
>
> {
>
>     Q_OBJECT
>
> public:
>
>     explicit Dialog(const QString& marbleDataPath,QWidget *parent = 0);
>
>     ~Dialog();
>
>     ControlView* marbleControl(){return m_controlView;}
>
>     MarbleWidget* marbleWidget(){return m_controlView->marbleWidget();}
>
> private:
>
>     Ui::Dialog *ui;
>
>     ControlView *m_controlView;
>
> private slots:
>
>     void on_QuitPB_clicked();
>
> };
>
> } // namespace Marble
>
> #endif // DIALOG_H
>
>
>
> ////////////////////////////////
>
> // dialog.cpp
>
> #include "dialog.h"
>
> #include "ui_dialog.h"
>
> using namespace Marble;
>
> Dialog::Dialog(const QString& marbleDataPath,QWidget *parent) :
>
>     QDialog(parent),
>
>     ui(new Ui::Dialog)
>
> {
>
>     ui->setupUi(this);
>
>     m_controlView = new ControlView(this);
>
>     setWindowTitle("MIT Lincoln Lab - COTM Tracker");
>
> }
>
> Dialog::~Dialog()
>
> {
>
>     delete ui;
>
> }
>
> void Dialog::on_QuitPB_clicked()
>
> {
>
>     exit(0);
>
> }
>
>
>
>
>
> ////////////////////////////////
>
> // main.cpp
>
> #include <QtGui/QApplication>
>
> #include "dialog.h"
>
> #include "MarbleDebug.h"
>
> #include "MarbleDirs.h"
>
> using namespace Marble;
>
> int main(int argc, char *argv[])
>
> {
>
>     QApplication a(argc, argv);
>
>     QString marbleDataPath = "C:\\Program Files\\Marble 0.8.0\\data";
>
>     Dialog *mp_dialog = new Dialog(marbleDataPath);
>
>     mp_dialog->setAttribute(Qt::WA_DeleteOnClose,true);
>
>     mp_dialog->show();
>
>     return a.exec();
>
> }
>
> ////////////////////////////////
>
>
>
> // .pro file
>
>
>
> #-------------------------------------------------
>
> #
>
> # Project created by QtCreator 2010-07-21T16:14:07
>
> #
>
> #-------------------------------------------------
>
> QT       += core gui
>
> TARGET = cotm_map
>
> TEMPLATE = app
>
> SOURCES += main.cpp\
>
>         dialog.cpp \
>
>     ControlView.cpp
>
> HEADERS  += dialog.h \
>
>     ControlView.h
>
> FORMS    += dialog.ui
>
> win32 {
>
>     INCLUDEPATH += C:/marble/src/lib\
>
>                 C:/marble/src/lib/geodata/data\
>
>                 C:/marble/src/lib/geodata\
>
>                 C:/marble/src/lib/graphicsview\
>
>                 C:/marble-build/src/lib\
>
>                 C:/marble-build/src
>
>     LIBS += -L"c:\marble-build\src\lib\" "libmarblewidget.dll"
>
> }
>
> unix {
>
>     LIBS += -L/usr/local/lib \
>
>     -lmarblewidget
>
> }
>
>
>
>
>
> //////////////////////////////////////////////////////////////
>
>
>
> // Compile Output
>
>
>
> *Running build steps for project cotm_map...*
>
> Configuration unchanged, skipping qmake step.
>
> Starting: "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" -w
>
> mingw32-make: Entering directory `C:/Users/Bryan
> Greenway/Documents/Qt_Projects/cotm_map-build-desktop'
>
> C:/Qt/2010.04/mingw/bin/mingw32-make -f Makefile.Release
>
> mingw32-make[1]: Entering directory `C:/Users/Bryan
> Greenway/Documents/Qt_Projects/cotm_map-build-desktop'
>
> g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE
> -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
> -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2010.04\qt\include\QtCore"
> -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include"
> -I"c:\marble\src\lib" -I"c:\marble\src\lib\geodata\data"
> -I"c:\marble\src\lib\geodata" -I"c:\marble\src\lib\graphicsview"
> -I"c:\marble-build\src\lib" -I"c:\marble-build\src"
> -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"." -I"..\cotm_map"
> -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++" -o release\dialog.o
> ..\cotm_map\dialog.cpp
>
> g++ -enable-stdcall-fixup -Wl,-enable-auto-import
> -Wl,-enable-runtime-pseudo-reloc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows
> -o release\cotm_map.exe release/main.o release/dialog.o
> release/ControlView.o release/moc_dialog.o release/moc_ControlView.o
> -L"c:\Qt\2010.04\qt\lib" -lmingw32 -lqtmain "-Lc:\marble-build\src\lib
> -lmarblewidget.dll" -lQtGui4 -lQtCore4
>
> release/ControlView.o:ControlView.cpp:(.text+0x93): undefined reference to
> `_imp___ZN6Marble16MarbleControlBox19setFileViewTabShownEb'
>
> release/ControlView.o:ControlView.cpp:(.text+0xb3): undefined reference to
> `_imp___ZN6Marble16MarbleControlBox26setCurrentLocationTabShownEb'
>
> release/ControlView.o:ControlView.cpp:(.text+0xd3): undefined reference to
> `_imp___ZN6Marble16MarbleControlBox18setMapViewTabShownEb'
>
> release/ControlView.o:ControlView.cpp:(.text+0xf3): undefined reference to
> `_imp___ZN6Marble16MarbleControlBox17setLegendTabShownEb'
>
> release/ControlView.o:ControlView.cpp:(.text+0x113): undefined reference to
> `_imp___ZN6Marble16MarbleControlBox21setNavigationTabShownEb'
>
> release/ControlView.o:ControlView.cpp:(.text+0x12c): undefined reference to
> `_imp___ZN6Marble12MarbleWidget8moveDownEv'
>
> release/ControlView.o:ControlView.cpp:(.text+0x144): undefined reference to
> `_imp___ZN6Marble12MarbleWidget6moveUpEv'
>
> release/ControlView.o:ControlView.cpp:(.text+0x15c): undefined reference to
> `_imp___ZN6Marble12MarbleWidget9moveRightEv'
>
> release/ControlView.o:ControlView.cpp:(.text+0x174): undefined reference to
> `_imp___ZN6Marble12MarbleWidget8moveLeftEv'
>
> release/ControlView.o:ControlView.cpp:(.text+0x18c): undefined reference to
> `_imp___ZN6Marble12MarbleWidget7zoomOutEv'
>
> release/ControlView.o:ControlView.cpp:(.text+0x1a4): undefined reference to
> `_imp___ZN6Marble12MarbleWidget6zoomInEv'
>
> release/ControlView.o:ControlView.cpp:(.text+0x3cc): undefined reference to
> `_imp___ZN6Marble16MarbleControlBoxC1EP7QWidget'
>
> release/ControlView.o:ControlView.cpp:(.text+0x430): undefined reference to
> `_imp___ZN6Marble12MarbleWidgetC1EP7QWidget'
>
> release/ControlView.o:ControlView.cpp:(.text+0x5a4): undefined reference to
> `_imp___ZN6Marble16MarbleControlBox15addMarbleWidgetEPNS_12MarbleWidgetE'
>
> release/ControlView.o:ControlView.cpp:(.text+0x5c3): undefined reference to
> `_imp___ZN6Marble15MapThemeManagerC1EP7QObject'
>
> release/ControlView.o:ControlView.cpp:(.text+0x5cf): undefined reference to
> `_imp___ZN6Marble15MapThemeManager13mapThemeModelEv'
>
> release/ControlView.o:ControlView.cpp:(.text+0x5df): undefined reference to
> `_imp___ZN6Marble16MarbleControlBox16setMapThemeModelEP18QStandardItemModel'
>
>
> release/ControlView.o:ControlView.cpp:(.text+0x5eb): undefined reference to
> `_imp___ZN6Marble16MarbleControlBox18updateMapThemeViewEv'
>
> release/ControlView.o:ControlView.cpp:(.text+0x7d8): undefined reference to
> `_imp___ZN6Marble16MarbleControlBoxC1EP7QWidget'
>
> release/ControlView.o:ControlView.cpp:(.text+0x83c): undefined reference to
> `_imp___ZN6Marble12MarbleWidgetC1EP7QWidget'
>
> release/ControlView.o:ControlView.cpp:(.text+0x9b0): undefined reference to
> `_imp___ZN6Marble16MarbleControlBox15addMarbleWidgetEPNS_12MarbleWidgetE'
>
> mingw32-make[1]: Leaving directory `C:/Users/Bryan
> Greenway/Documents/Qt_Projects/cotm_map-build-desktop'
>
> mingw32-make: Leaving directory `C:/Users/Bryan
> Greenway/Documents/Qt_Projects/cotm_map-build-desktop'
>
> release/ControlView.o:ControlView.cpp:(.text+0x9cf): undefined reference to
> `_imp___ZN6Marble15MapThemeManagerC1EP7QObject'
>
> release/ControlView.o:ControlView.cpp:(.text+0x9db): undefined reference to
> `_imp___ZN6Marble15MapThemeManager13mapThemeModelEv'
>
> release/ControlView.o:ControlView.cpp:(.text+0x9eb): undefined reference to
> `_imp___ZN6Marble16MarbleControlBox16setMapThemeModelEP18QStandardItemModel'
>
>
> release/ControlView.o:ControlView.cpp:(.text+0x9f7): undefined reference to
> `_imp___ZN6Marble16MarbleControlBox18updateMapThemeViewEv'
>
> collect2: ld returned 1 exit status
>
> mingw32-make[1]: *** [release\cotm_map.exe] Error 1
>
> mingw32-make: *** [release] Error 2
>
> *The process "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" exited with code
> %2.*
>
> Error while building project cotm_map (target: Desktop)
>
> When executing build step 'Make'
>
>
>
> ////////////////////////////////////////////////////////////////
>
>
>
> My observations:
>
>
>
> It appears to me that I’m not getting my libmarblewidget library to link.
> The file: libmarblewidget.dll is definitely in the c:\marble-build\src\lib\"
> directory.  And the makefile has the line:
>
> LIBS        =        -L"c:\Qt\2010.04\qt\lib" -lmingw32 -lqtmain
> "-Lc:\marble-build\src\lib -lmarblewidget.dll" -lQtGui4 -lQtCore4
>
>
>
> It also appears to me that I need to link in something for the
> MarbleControlBox and MapThemeManager.  I’m guessing that these are not part
> of the MarbleWidget, so something else will need to be included.
>
>
>
>
>
> Any help/suggestions would be greatly appreciated.  I apologize for the
> long email.
>
>
>
> Thanks very much!!
>
>
>
> Bryan
>
>
>
> _______________________________________________
> Marble-devel mailing list
> Marble-devel at kde.org
> https://mail.kde.org/mailman/listinfo/marble-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.kde.org/pipermail/marble-devel/attachments/20100723/dd9edc40/attachment-0001.htm 


More information about the Marble-devel mailing list