[Marble-devel] Help with MarbleWidget
Bryan Greenway
rbgreenway at gmail.com
Fri Jul 23 02:52:11 CEST 2010
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.kde.org/pipermail/marble-devel/attachments/20100722/73ce7247/attachment-0001.htm
More information about the Marble-devel
mailing list