[Qt] Add a Qt app example
Should build and run with `make run-qt` Signed-off-by: Bruno Abinader <bruno@mapbox.com> Signed-off-by: Thiago Marcos P. Santos <thiago@mapbox.com>
This commit is contained in:
committed by
Thiago Marcos P. Santos
parent
854b3bc39b
commit
7a44b95627
20
platform/qt/app/main.cpp
Normal file
20
platform/qt/app/main.cpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#include "mapwindow.hpp"
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
|
||||
QMapboxGLSettings settings;
|
||||
settings.setAccessToken(qgetenv("MAPBOX_ACCESS_TOKEN"));
|
||||
settings.setCacheDatabasePath("/tmp/mbgl-cache.db");
|
||||
settings.setCacheDatabaseMaximumSize(20 * 1024 * 1024);
|
||||
|
||||
MapWindow window(settings);
|
||||
|
||||
window.resize(800, 600);
|
||||
window.show();
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
122
platform/qt/app/mapwindow.cpp
Normal file
122
platform/qt/app/mapwindow.cpp
Normal file
@@ -0,0 +1,122 @@
|
||||
#include "mapwindow.hpp"
|
||||
|
||||
#include <mbgl/util/default_styles.hpp>
|
||||
|
||||
#include <QKeyEvent>
|
||||
#include <QMouseEvent>
|
||||
#include <QString>
|
||||
|
||||
MapWindow::MapWindow(const QMapboxGLSettings &settings) : m_map(nullptr, settings)
|
||||
{
|
||||
connect(&m_map, SIGNAL(needsRendering()), this, SLOT(updateGL()));
|
||||
|
||||
// Set default location to Helsinki.
|
||||
m_map.setCoordinateZoom(QMapboxGL::Coordinate(60.170448, 24.942046), 14);
|
||||
|
||||
changeStyle();
|
||||
}
|
||||
|
||||
void MapWindow::changeStyle()
|
||||
{
|
||||
static uint8_t currentStyleIndex;
|
||||
|
||||
mbgl::util::default_styles::DefaultStyle newStyle =
|
||||
mbgl::util::default_styles::orderedStyles[currentStyleIndex];
|
||||
|
||||
QString url(newStyle.url);
|
||||
m_map.setStyleURL(url);
|
||||
|
||||
QString name(newStyle.name);
|
||||
setWindowTitle(QString("Mapbox GL: ") + name);
|
||||
|
||||
if (++currentStyleIndex == mbgl::util::default_styles::numOrderedStyles) {
|
||||
currentStyleIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void MapWindow::keyPressEvent(QKeyEvent *ev)
|
||||
{
|
||||
if (ev->key() == Qt::Key_S) {
|
||||
changeStyle();
|
||||
}
|
||||
|
||||
ev->accept();
|
||||
}
|
||||
|
||||
void MapWindow::mousePressEvent(QMouseEvent *ev)
|
||||
{
|
||||
#if QT_VERSION < 0x050000
|
||||
m_lastPos = ev->posF();
|
||||
#else
|
||||
m_lastPos = ev->localPos();
|
||||
#endif
|
||||
|
||||
if (ev->type() == QEvent::MouseButtonPress) {
|
||||
if (ev->buttons() == (Qt::LeftButton | Qt::RightButton)) {
|
||||
changeStyle();
|
||||
}
|
||||
}
|
||||
|
||||
if (ev->type() == QEvent::MouseButtonDblClick) {
|
||||
if (ev->buttons() == Qt::LeftButton) {
|
||||
m_map.scaleBy(2.0, m_lastPos, 500);
|
||||
} else if (ev->buttons() == Qt::RightButton) {
|
||||
m_map.scaleBy(0.5, m_lastPos, 500);
|
||||
}
|
||||
}
|
||||
|
||||
ev->accept();
|
||||
}
|
||||
|
||||
void MapWindow::mouseMoveEvent(QMouseEvent *ev)
|
||||
{
|
||||
#if QT_VERSION < 0x050000
|
||||
QPointF delta = ev->posF() - m_lastPos;
|
||||
#else
|
||||
QPointF delta = ev->localPos() - m_lastPos;
|
||||
#endif
|
||||
|
||||
if (!delta.isNull()) {
|
||||
if (ev->buttons() == Qt::LeftButton) {
|
||||
m_map.moveBy(delta);
|
||||
} else if (ev->buttons() == Qt::RightButton) {
|
||||
#if QT_VERSION < 0x050000
|
||||
m_map.rotateBy(m_lastPos, ev->posF());
|
||||
#else
|
||||
m_map.rotateBy(m_lastPos, ev->localPos());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#if QT_VERSION < 0x050000
|
||||
m_lastPos = ev->posF();
|
||||
#else
|
||||
m_lastPos = ev->localPos();
|
||||
#endif
|
||||
ev->accept();
|
||||
}
|
||||
|
||||
void MapWindow::wheelEvent(QWheelEvent *ev)
|
||||
{
|
||||
if (ev->orientation() == Qt::Horizontal) {
|
||||
return;
|
||||
}
|
||||
|
||||
float factor = ev->delta() / 1200.;
|
||||
if (ev->delta() < 0) {
|
||||
factor = factor > -1 ? factor : 1 / factor;
|
||||
}
|
||||
|
||||
m_map.scaleBy(1 + factor, ev->pos(), 50);
|
||||
ev->accept();
|
||||
}
|
||||
|
||||
void MapWindow::resizeGL(int w, int h)
|
||||
{
|
||||
m_map.resize(QSize(w, h));
|
||||
}
|
||||
|
||||
void MapWindow::paintGL()
|
||||
{
|
||||
m_map.render();
|
||||
}
|
||||
32
platform/qt/app/mapwindow.hpp
Normal file
32
platform/qt/app/mapwindow.hpp
Normal file
@@ -0,0 +1,32 @@
|
||||
#ifndef MAPWINDOW_H
|
||||
#define MAPWINDOW_H
|
||||
|
||||
#include <QGLWidget>
|
||||
#include <QMapboxGL>
|
||||
|
||||
class QKeyEvent;
|
||||
class QMouseEvent;
|
||||
class QWheelEvent;
|
||||
|
||||
class MapWindow : public QGLWidget
|
||||
{
|
||||
public:
|
||||
MapWindow(const QMapboxGLSettings &);
|
||||
|
||||
private:
|
||||
void changeStyle();
|
||||
|
||||
// QGLWidget implementation.
|
||||
void keyPressEvent(QKeyEvent *ev) final;
|
||||
void mousePressEvent(QMouseEvent *ev) final;
|
||||
void mouseMoveEvent(QMouseEvent *ev) final;
|
||||
void wheelEvent(QWheelEvent *ev) final;
|
||||
void resizeGL(int w, int h) final;
|
||||
void paintGL() final;
|
||||
|
||||
QPointF m_lastPos;
|
||||
|
||||
QMapboxGL m_map;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user