mirror of
https://github.com/Serial-Studio/Serial-Studio.git
synced 2025-01-31 17:42:55 +08:00
306 lines
18 KiB
HTML
306 lines
18 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
|
|
<title>QMapControl: multidemo.cpp</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css">
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
|
</head><body>
|
|
<!-- Generated by Doxygen 1.5.9 -->
|
|
<div class="navigation" id="top">
|
|
<div class="tabs">
|
|
<ul>
|
|
<li><a href="index.html"><span>Main Page</span></a></li>
|
|
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
|
<li><a href="annotated.html"><span>Classes</span></a></li>
|
|
<li><a href="files.html"><span>Files</span></a></li>
|
|
<li><a href="examples.html"><span>Examples</span></a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="contents">
|
|
<h1>multidemo.cpp</h1>This is a bit complexer application, which lets you play around. There are the following buttons configured:<ul>
|
|
<li>Add Point: adds a Point to the coordinate you click (this point will be clickable)</li><li>Drag Rect: lets to drag a rectangular into which will be zoomed in</li><li>Move To Click: moves the view middle to the clicked coordinate</li><li>GPS: starts a "pseudo" GPS receiver which emits new positions, these are connected to the ImagePoint</li><li>Follow Geom: Follows the ImagePoint, when it moves because of new GPS positions</li></ul>
|
|
<p>
|
|
A overview map lefts you see where you are. You can even click on it to change your position.<p>
|
|
You can find this example here: MapAPI/Samples/Multimap <div align="center">
|
|
<img src="sample_multidemo.png" alt="sample_multidemo.png">
|
|
<p><strong>screenshot</strong></p></div>
|
|
<div class="fragment"><pre class="fragment"><span class="preprocessor">#include "multidemo.h"</span>
|
|
Multidemo::Multidemo(QWidget *parent)
|
|
: QWidget(parent)
|
|
{
|
|
setupMaps();
|
|
createLayout();
|
|
|
|
gm = <span class="keyword">new</span> GPS_Modul();
|
|
connect(gm, SIGNAL(new_position(QPointF)),
|
|
ip, SLOT(setCoordinate(QPointF)));
|
|
|
|
}
|
|
|
|
<span class="keywordtype">void</span> Multidemo::setupMaps()
|
|
{
|
|
QSize size = QSize(480,640);
|
|
|
|
<span class="comment">// main map control</span>
|
|
mc = <span class="keyword">new</span> MapControl(size);
|
|
MapAdapter* mapadapter = <span class="keyword">new</span> WMSMapAdapter(<span class="stringliteral">"www2.demis.nl"</span>, <span class="stringliteral">"/wms/wms.asp?wms=WorldMap&LAYERS=Countries,Borders,Cities,Rivers,Settlements,Hillshading,Waterbodies,Railroads,Highways,Roads&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&STYLES=&EXCEPTIONS=application/vnd.ogc.se_inimage&SRS=EPSG:4326&TRANSPARENT=FALSE"</span>, 256);
|
|
|
|
<span class="comment">// maplayer</span>
|
|
Layer* l = <span class="keyword">new</span> MapLayer(<span class="stringliteral">"Custom Layer"</span>, mapadapter);
|
|
mc->addLayer(l);
|
|
<span class="comment">// Geometry layer</span>
|
|
Layer* l2 = <span class="keyword">new</span> GeometryLayer(<span class="stringliteral">"Geom Layer"</span>, mapadapter);
|
|
mc->addLayer(l2);
|
|
|
|
|
|
<span class="comment">// "minimap" control</span>
|
|
mc2 = <span class="keyword">new</span> MapControl(QSize(150,150), MapControl::None);
|
|
MapAdapter* mapadapter_mini = <span class="keyword">new</span> OSMMapAdapter();
|
|
Layer* layer_mini = <span class="keyword">new</span> MapLayer(<span class="stringliteral">"Custom Layer"</span>, mapadapter_mini);
|
|
mc2->addLayer(layer_mini);
|
|
|
|
<span class="comment">// create points</span>
|
|
QPen* pen = <span class="keyword">new</span> QPen(QColor(255, 0, 0, 100));
|
|
pen->setWidth(5);
|
|
QList<Point*> points;
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.259959, 50.001781, <span class="stringliteral">"Mainz, Hauptbahnhof"</span>, Point::Middle, pen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.263758, 49.998917, <span class="stringliteral">"Mainz, Münsterplatz"</span>, Point::Middle, pen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.265812, 50.001952, <span class="stringliteral">"Mainz, Neubrunnenplatz"</span>, Point::Middle, pen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.2688, 50.004015, <span class="stringliteral">"Mainz, Bauhofstraße LRP"</span>, Point::Middle, pen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.272845, 50.00495, <span class="stringliteral">"Mainz, Landtag"</span>, Point::Middle, pen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.272845, 50.00495, <span class="stringliteral">"Mainz, Brückenplatz"</span>, Point::Middle, pen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.280349, 50.008173, <span class="stringliteral">"Mainz, Brückenkopf"</span>, Point::Middle, pen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.273573, 50.016315, <span class="stringliteral">"Wiesbaden-Mainz-Kastel, Eleonorenstraße"</span>, Point::Middle, pen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.275145, 50.016992, <span class="stringliteral">"Wiesbaden-Mainz-Kastel, Johannes-Goßner-Straße"</span>, Point::Middle, pen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.270476, 50.021426, <span class="stringliteral">"Wiesbaden-Mainz-Kastel, Ruthof"</span>, Point::Middle, pen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.266445, 50.025913, <span class="stringliteral">"Wiesbaden-Mainz-Kastel, Mudra Kaserne"</span>, Point::Middle, pen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.260378, 50.030345, <span class="stringliteral">"Wiesbaden-Mainz-Amoneburg, Dyckerhoffstraße"</span>, Point::Middle, pen));
|
|
|
|
<span class="comment">// add points to linestring</span>
|
|
pen = <span class="keyword">new</span> QPen(QColor(0, 0, 255, 100));
|
|
pen->setWidth(5);
|
|
LineString* ls = <span class="keyword">new</span> LineString(points, <span class="stringliteral">"Busline 54"</span>, pen);
|
|
<span class="comment">// the linestring is added to the MapLayer l, since it doenst change its points</span>
|
|
l->addGeometry(ls);
|
|
|
|
<span class="comment">// this point receives position changes from the "gps modul"</span>
|
|
ip = <span class="keyword">new</span> ImagePoint(0,0, QCoreApplication::applicationDirPath() + <span class="stringliteral">"/images/marker1.png"</span>, <span class="stringliteral">"image point"</span>, Point::TopRight);
|
|
|
|
<span class="comment">// so if have to be added to the GeometryLayer l2</span>
|
|
l2->addGeometry(ip);
|
|
QPushButton* pb = <span class="keyword">new</span> QPushButton(<span class="stringliteral">"test button"</span>, mc);
|
|
|
|
<span class="comment">// widget example</span>
|
|
Point* wpoint = <span class="keyword">new</span> Point(-20,-20, pb, <span class="stringliteral">"."</span>, Point::TopLeft);
|
|
wpoint->setBaselevel(3);
|
|
l->addGeometry(wpoint);
|
|
pb->setGeometry(0,0,100,50);
|
|
|
|
connect(l, SIGNAL(geometryClicked(Geometry*, QPoint)),
|
|
<span class="keyword">this</span>, SLOT(geometryClickEvent(Geometry*, QPoint)));
|
|
connect(l2, SIGNAL(geometryClicked(Geometry*, QPoint)),
|
|
<span class="keyword">this</span>, SLOT(geometryClickEvent(Geometry*, QPoint)));
|
|
connect(mc, SIGNAL(boxDragged(<span class="keyword">const</span> QRectF)),
|
|
<span class="keyword">this</span>, SLOT(draggedRect(QRectF)));
|
|
connect(mc, SIGNAL(mouseEventCoordinate(<span class="keyword">const</span> QMouseEvent*, <span class="keyword">const</span> QPointF)),
|
|
<span class="keyword">this</span>, SLOT(mouseEventCoordinate(<span class="keyword">const</span> QMouseEvent*, <span class="keyword">const</span> QPointF)));
|
|
connect(mc, SIGNAL(mouseEventCoordinate(<span class="keyword">const</span> QMouseEvent*, <span class="keyword">const</span> QPointF)),
|
|
<span class="keyword">this</span>, SLOT(coordinateClicked(<span class="keyword">const</span> QMouseEvent*, <span class="keyword">const</span> QPointF)));
|
|
connect(mc2, SIGNAL(mouseEventCoordinate(<span class="keyword">const</span> QMouseEvent*, <span class="keyword">const</span> QPointF)),
|
|
<span class="keyword">this</span>, SLOT(coordinateClicked_mc2(<span class="keyword">const</span> QMouseEvent*, <span class="keyword">const</span> QPointF)));
|
|
}
|
|
|
|
<span class="keywordtype">void</span> Multidemo::createLayout()
|
|
{
|
|
btn1 = <span class="keyword">new</span> QPushButton(<span class="stringliteral">"Add Point"</span>);
|
|
btn1->setCheckable(<span class="keyword">true</span>);
|
|
btn1->setMaximumWidth(80);
|
|
btn1->setMaximumHeight(20);
|
|
btn1->setFont(QFont(<span class="stringliteral">"Verdana"</span>, 5));
|
|
|
|
btn2 = <span class="keyword">new</span> QPushButton(<span class="stringliteral">"Drag Rect"</span>);
|
|
btn2->setCheckable(<span class="keyword">true</span>);
|
|
btn2->setMaximumHeight(20);
|
|
btn2->setFont(QFont(<span class="stringliteral">"Verdana"</span>, 5));
|
|
btn2->setMaximumWidth(80);
|
|
|
|
btn3 = <span class="keyword">new</span> QPushButton(<span class="stringliteral">"Move to Click"</span>);
|
|
btn3->setCheckable(<span class="keyword">true</span>);
|
|
btn3->setMaximumHeight(20);
|
|
btn3->setFont(QFont(<span class="stringliteral">"Verdana"</span>, 5));
|
|
btn3->setMaximumWidth(80);
|
|
|
|
btn4 = <span class="keyword">new</span> QPushButton(<span class="stringliteral">"Follow Geom"</span>);
|
|
btn4->setCheckable(<span class="keyword">true</span>);
|
|
btn4->setMaximumHeight(20);
|
|
btn4->setFont(QFont(<span class="stringliteral">"Verdana"</span>, 5));
|
|
btn4->setMaximumWidth(80);
|
|
|
|
btn5 = <span class="keyword">new</span> QPushButton(<span class="stringliteral">"GPS"</span>);
|
|
btn5->setCheckable(<span class="keyword">true</span>);
|
|
btn5->setMaximumHeight(20);
|
|
btn5->setFont(QFont(<span class="stringliteral">"Verdana"</span>, 5));
|
|
btn5->setMaximumWidth(80);
|
|
btn1->setFocusPolicy(Qt::NoFocus);
|
|
btn2->setFocusPolicy(Qt::NoFocus);
|
|
btn3->setFocusPolicy(Qt::NoFocus);
|
|
btn4->setFocusPolicy(Qt::NoFocus);
|
|
btn5->setFocusPolicy(Qt::NoFocus);
|
|
|
|
QHBoxLayout* layout = <span class="keyword">new</span> QHBoxLayout;
|
|
QVBoxLayout* layoutinner = <span class="keyword">new</span> QVBoxLayout;
|
|
|
|
layoutinner->addWidget(mc2);
|
|
layoutinner->addWidget(btn1);
|
|
layoutinner->addWidget(btn2);
|
|
layoutinner->addWidget(btn3);
|
|
layoutinner->addWidget(btn4);
|
|
layoutinner->addWidget(btn5);
|
|
layoutinner->addSpacing(70);
|
|
layout->addLayout(layoutinner);
|
|
|
|
QHBoxLayout* mclayout = <span class="keyword">new</span> QHBoxLayout;
|
|
mclayout->addWidget(mc);
|
|
mclayout->setMargin(0);
|
|
setLayout(mclayout);
|
|
|
|
mc->setLayout(layoutinner);
|
|
|
|
connect(btn2, SIGNAL(toggled( <span class="keywordtype">bool</span> )),
|
|
<span class="keyword">this</span>, SLOT(buttonToggled(<span class="keywordtype">bool</span>)));
|
|
|
|
connect(btn4, SIGNAL(toggled( <span class="keywordtype">bool</span> )),
|
|
<span class="keyword">this</span>, SLOT(toggleFollow(<span class="keywordtype">bool</span>)));
|
|
|
|
connect(btn5, SIGNAL(toggled( <span class="keywordtype">bool</span> )),
|
|
<span class="keyword">this</span>, SLOT(toggleGPS(<span class="keywordtype">bool</span>)));
|
|
}
|
|
|
|
<span class="keywordtype">void</span> Multidemo::coordinateClicked(<span class="keyword">const</span> QMouseEvent* evnt, <span class="keyword">const</span> QPointF coord)
|
|
{
|
|
<span class="keywordflow">if</span> (btn1->isChecked() && evnt->type()==QEvent::MouseButtonPress)
|
|
{
|
|
mc->layer(<span class="stringliteral">"Geom Layer"</span>)->addGeometry(<span class="keyword">new</span> CirclePoint(coord.x(), coord.y(), 10, <span class="stringliteral">"added point"</span>));
|
|
mc->updateRequestNew();
|
|
}
|
|
}
|
|
|
|
<span class="keywordtype">void</span> Multidemo::geometryClickEvent(Geometry* geom, QPoint)
|
|
{
|
|
<span class="keywordflow">if</span> (geom->hasClickedPoints())
|
|
{
|
|
QList<Geometry*> pp = geom->clickedPoints();
|
|
<span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i<pp.size(); i++)
|
|
{
|
|
QMessageBox::information(<span class="keyword">this</span>, geom->name(), pp.at(i)->name());
|
|
}
|
|
}
|
|
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (geom->GeometryType == <span class="stringliteral">"Point"</span>)
|
|
{
|
|
QMessageBox::information(<span class="keyword">this</span>, geom->name(), QString(<span class="stringliteral">"Position: "</span>).append(QString().setNum(((Point*)geom)->longitude())).append(QString(<span class="stringliteral">"/"</span>)).append(QString().setNum(((Point*)geom)->latitude())));
|
|
}
|
|
|
|
}
|
|
|
|
Multidemo::~Multidemo()
|
|
{
|
|
}
|
|
|
|
<span class="keywordtype">void</span> Multidemo::keyPressEvent(QKeyEvent* evnt)
|
|
{
|
|
<span class="keywordflow">if</span> (evnt->key() == 49 || evnt->key() == 17825792) <span class="comment">// keyboard '1'</span>
|
|
{
|
|
mc->zoomIn();
|
|
}
|
|
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt->key() == 50)
|
|
{
|
|
mc->moveTo(QPointF(8.25, 60));
|
|
}
|
|
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt->key() == 51 || evnt->key() == 16777313) <span class="comment">// keyboard '3'</span>
|
|
{
|
|
mc->zoomOut();
|
|
}
|
|
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt->key() == 52) <span class="comment">//4</span>
|
|
{
|
|
mc->updateRequestNew();
|
|
}
|
|
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt->key() == 16777234) <span class="comment">// left</span>
|
|
{
|
|
mc->scrollLeft();
|
|
}
|
|
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt->key() == 16777236) <span class="comment">// right</span>
|
|
{
|
|
mc->scrollRight();
|
|
}
|
|
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt->key() == 16777235 ) <span class="comment">// up</span>
|
|
{
|
|
mc->scrollUp();
|
|
}
|
|
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt->key() == 16777237) <span class="comment">// down</span>
|
|
{
|
|
mc->scrollDown();
|
|
}
|
|
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt->key() == 48 || evnt->key() == 17825797) <span class="comment">// 0</span>
|
|
{
|
|
emit(close());
|
|
}
|
|
}
|
|
|
|
<span class="keywordtype">void</span> Multidemo::buttonToggled(<span class="keywordtype">bool</span> active)
|
|
{
|
|
<span class="keywordflow">if</span> (active)
|
|
mc->setMouseMode(MapControl::Dragging);
|
|
<span class="keywordflow">else</span>
|
|
mc->setMouseMode(MapControl::Panning);
|
|
}
|
|
<span class="keywordtype">void</span> Multidemo::toggleFollow(<span class="keywordtype">bool</span> follow)
|
|
{
|
|
<span class="keywordflow">if</span> (follow)
|
|
mc->followGeometry(ip);
|
|
<span class="keywordflow">else</span>
|
|
mc->stopFollowing(ip);
|
|
}
|
|
<span class="keywordtype">void</span> Multidemo::toggleGPS(<span class="keywordtype">bool</span> gps)
|
|
{
|
|
<span class="keywordflow">if</span> (gps)
|
|
gm->start();
|
|
<span class="keywordflow">else</span>
|
|
gm->stop();
|
|
|
|
}
|
|
|
|
<span class="keywordtype">void</span> Multidemo::draggedRect(QRectF rect)
|
|
{
|
|
QList<QPointF> coords;
|
|
coords.append(rect.topLeft());
|
|
coords.append(rect.bottomRight());
|
|
mc->setViewAndZoomIn(coords);
|
|
}
|
|
|
|
<span class="keywordtype">void</span> Multidemo::mouseEventCoordinate(<span class="keyword">const</span> QMouseEvent* evnt, <span class="keyword">const</span> QPointF coordinate)
|
|
{
|
|
<span class="keywordflow">if</span> (evnt->type() == QEvent::MouseButtonPress && btn3->isChecked())
|
|
{
|
|
mc->moveTo(coordinate);
|
|
}
|
|
<span class="comment">//update mini-window</span>
|
|
<span class="keywordflow">else</span> <span class="keywordflow">if</span>(evnt->type() == QEvent::MouseButtonRelease)
|
|
{
|
|
mc2->setView(mc->currentCoordinate());
|
|
}
|
|
}
|
|
<span class="keywordtype">void</span> Multidemo::coordinateClicked_mc2(<span class="keyword">const</span> QMouseEvent* evnt, <span class="keyword">const</span> QPointF coordinate)
|
|
{
|
|
<span class="keywordflow">if</span> (evnt->type() == QEvent::MouseButtonPress)
|
|
{
|
|
mc2->moveTo(coordinate);
|
|
mc->setView(coordinate);
|
|
}
|
|
}
|
|
</pre></div> </div>
|
|
<hr size="1"><address style="text-align: right;"><small>Generated on Wed Jul 29 12:38:09 2009 for QMapControl by
|
|
<a href="http://www.doxygen.org/index.html">
|
|
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
|
|
</body>
|
|
</html>
|