mirror of
https://github.com/Serial-Studio/Serial-Studio.git
synced 2025-01-31 17:42:55 +08:00
181 lines
10 KiB
HTML
181 lines
10 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: linesandpoints.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>linesandpoints.cpp</h1>This application demonstrates how to use Geometry objects and how to add them to a layer.<p>
|
|
Here are used three different point types:<ul>
|
|
<li>One which displays a image</li><li>One which draws a plain circle</li><li>One which uses a QPen to draw a circle</li><li>One which has no markers Then these Points were added to a LineString</li></ul>
|
|
<p>
|
|
Also there is a keylistener.<p>
|
|
You can find this example here: MapAPI/Samples/LinesAndPoints <div align="center">
|
|
<img src="sample_linesandpoints.png" alt="sample_linesandpoints.png">
|
|
<p><strong>screenshot</strong></p></div>
|
|
<div class="fragment"><pre class="fragment"><span class="preprocessor">#include "linesandpoints.h"</span>
|
|
LinesAndPoints::LinesAndPoints(QWidget *parent)
|
|
: QWidget(parent)
|
|
{
|
|
<span class="comment">// the size which the QMapControl should fill</span>
|
|
QSize size = QSize(480,640);
|
|
|
|
mc = <span class="keyword">new</span> MapControl(size);
|
|
<span class="comment">// create layout</span>
|
|
QHBoxLayout* layout = <span class="keyword">new</span> QHBoxLayout;
|
|
layout->addWidget(mc);
|
|
setLayout(layout);
|
|
|
|
<span class="comment">// create layer</span>
|
|
MapAdapter* mapadapter = <span class="keyword">new</span> OSMMapAdapter();
|
|
Layer* l = <span class="keyword">new</span> MapLayer(<span class="stringliteral">"Custom Layer"</span>, mapadapter);
|
|
|
|
mc->addLayer(l);
|
|
|
|
<span class="comment">// create a LineString</span>
|
|
QList<Point*> points;
|
|
<span class="comment">// Points with image</span>
|
|
points.append(<span class="keyword">new</span> ImagePoint(8.259959, 50.001781, <span class="stringliteral">"images/bus_stop.png"</span>, <span class="stringliteral">"Mainz, Hauptbahnhof"</span>, Point::BottomLeft));
|
|
points.append(<span class="keyword">new</span> ImagePoint(8.263758, 49.998917, <span class="stringliteral">"images/bus_stop.png"</span>, <span class="stringliteral">"Mainz, Münsterplatz"</span>, Point::BottomLeft));
|
|
points.append(<span class="keyword">new</span> ImagePoint(8.265812, 50.001952, <span class="stringliteral">"images/bus_stop.png"</span>,<span class="stringliteral">"Mainz, Neubrunnenplatz"</span>, Point::BottomLeft));
|
|
<span class="comment">// Points with a circle</span>
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.2688, 50.004015, <span class="stringliteral">"Mainz, Bauhofstraße LRP"</span>, Point::Middle));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.272845, 50.00495, <span class="stringliteral">"Mainz, Landtag"</span>, Point::Middle));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.280349, 50.008173, <span class="stringliteral">"Mainz, Brückenkopf"</span>, Point::Middle));
|
|
<span class="comment">// A QPen can be used to customize the </span>
|
|
QPen* pointpen = <span class="keyword">new</span> QPen(QColor(0,255,0));
|
|
pointpen->setWidth(3);
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.273573, 50.016315, 15, <span class="stringliteral">"Wiesbaden-Mainz-Kastel, Eleonorenstraße"</span>, Point::Middle, pointpen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.275145, 50.016992, 15, <span class="stringliteral">"Wiesbaden-Mainz-Kastel, Johannes-Goßner-Straße"</span>, Point::Middle, pointpen));
|
|
points.append(<span class="keyword">new</span> CirclePoint(8.270476, 50.021426, 15, <span class="stringliteral">"Wiesbaden-Mainz-Kastel, Ruthof"</span>, Point::Middle, pointpen));
|
|
<span class="comment">// "Blind" Points</span>
|
|
points.append(<span class="keyword">new</span> Point(8.266445, 50.025913, <span class="stringliteral">"Wiesbaden-Mainz-Kastel, Mudra Kaserne"</span>));
|
|
points.append(<span class="keyword">new</span> Point(8.260378, 50.030345, <span class="stringliteral">"Wiesbaden-Mainz-Amoneburg, Dyckerhoffstraße"</span>));
|
|
|
|
<span class="comment">// A QPen also can use transparency</span>
|
|
QPen* linepen = <span class="keyword">new</span> QPen(QColor(0, 0, 255, 100));
|
|
linepen->setWidth(5);
|
|
<span class="comment">// Add the Points and the QPen to a LineString </span>
|
|
LineString* ls = <span class="keyword">new</span> LineString(points, <span class="stringliteral">"Busline 54"</span>, linepen);
|
|
|
|
<span class="comment">// Add the LineString to the layer</span>
|
|
l->addGeometry(ls);
|
|
|
|
<span class="comment">// Connect click events of the layer to this object</span>
|
|
connect(l, SIGNAL(geometryClicked(Geometry*, QPoint)),
|
|
<span class="keyword">this</span>, SLOT(geometryClicked(Geometry*, QPoint)));
|
|
|
|
<span class="comment">// Sets the view to the interesting area</span>
|
|
QList<QPointF> view;
|
|
view.append(QPointF(8.24764, 50.0319));
|
|
view.append(QPointF(8.28412, 49.9998));
|
|
mc->setView(view);
|
|
|
|
addZoomButtons();
|
|
}
|
|
|
|
<span class="keywordtype">void</span> LinesAndPoints::addZoomButtons()
|
|
{
|
|
<span class="comment">// create buttons as controls for zoom</span>
|
|
QPushButton* zoomin = <span class="keyword">new</span> QPushButton(<span class="stringliteral">"+"</span>);
|
|
QPushButton* zoomout = <span class="keyword">new</span> QPushButton(<span class="stringliteral">"-"</span>);
|
|
zoomin->setMaximumWidth(50);
|
|
zoomout->setMaximumWidth(50);
|
|
|
|
connect(zoomin, SIGNAL(clicked(<span class="keywordtype">bool</span>)),
|
|
mc, SLOT(zoomIn()));
|
|
connect(zoomout, SIGNAL(clicked(<span class="keywordtype">bool</span>)),
|
|
mc, SLOT(zoomOut()));
|
|
|
|
<span class="comment">// add zoom buttons to the layout of the MapControl</span>
|
|
QVBoxLayout* innerlayout = <span class="keyword">new</span> QVBoxLayout;
|
|
innerlayout->addWidget(zoomin);
|
|
innerlayout->addWidget(zoomout);
|
|
mc->setLayout(innerlayout);
|
|
}
|
|
|
|
<span class="keywordtype">void</span> LinesAndPoints::geometryClicked(Geometry* geom, QPoint)
|
|
{
|
|
qDebug() << <span class="stringliteral">"parent: "</span> << geom->parentGeometry();
|
|
qDebug() << <span class="stringliteral">"Element clicked: "</span> << geom->name();
|
|
<span class="keywordflow">if</span> (geom->hasClickedPoints())
|
|
{
|
|
QList<Geometry*> pp = geom->clickedPoints();
|
|
qDebug() << <span class="stringliteral">"number of child elements: "</span> << pp.size();
|
|
<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(), <span class="stringliteral">"just a point"</span>);
|
|
}
|
|
}
|
|
|
|
LinesAndPoints::~LinesAndPoints()
|
|
{
|
|
}
|
|
|
|
<span class="keywordtype">void</span> LinesAndPoints::keyPressEvent(QKeyEvent* evnt)
|
|
{
|
|
<span class="keywordflow">if</span> (evnt->key() == 49 || evnt->key() == 17825792) <span class="comment">// tastatur '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">// tastatur '3'</span>
|
|
{
|
|
mc->zoomOut();
|
|
}
|
|
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt->key() == 54) <span class="comment">// 6</span>
|
|
{
|
|
mc->setView(QPointF(8,50));
|
|
}
|
|
<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="keywordflow">else</span>
|
|
{
|
|
qDebug() << evnt->key() << endl;
|
|
}
|
|
}
|
|
</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>
|