Serial-Studio/libs/QMapControl/html/linesandpoints_8cpp-example.html
2021-12-06 10:56:03 -06:00

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&nbsp;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-&gt;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-&gt;addLayer(l);
<span class="comment">// create a LineString</span>
QList&lt;Point*&gt; 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-&gt;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-&gt;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-&gt;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&lt;QPointF&gt; view;
view.append(QPointF(8.24764, 50.0319));
view.append(QPointF(8.28412, 49.9998));
mc-&gt;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-&gt;setMaximumWidth(50);
zoomout-&gt;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-&gt;addWidget(zoomin);
innerlayout-&gt;addWidget(zoomout);
mc-&gt;setLayout(innerlayout);
}
<span class="keywordtype">void</span> LinesAndPoints::geometryClicked(Geometry* geom, QPoint)
{
qDebug() &lt;&lt; <span class="stringliteral">"parent: "</span> &lt;&lt; geom-&gt;parentGeometry();
qDebug() &lt;&lt; <span class="stringliteral">"Element clicked: "</span> &lt;&lt; geom-&gt;name();
<span class="keywordflow">if</span> (geom-&gt;hasClickedPoints())
{
QList&lt;Geometry*&gt; pp = geom-&gt;clickedPoints();
qDebug() &lt;&lt; <span class="stringliteral">"number of child elements: "</span> &lt;&lt; pp.size();
<span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;pp.size(); i++)
{
QMessageBox::information(<span class="keyword">this</span>, geom-&gt;name(), pp.at(i)-&gt;name());
}
}
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (geom-&gt;GeometryType == <span class="stringliteral">"Point"</span>)
{
QMessageBox::information(<span class="keyword">this</span>, geom-&gt;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-&gt;key() == 49 || evnt-&gt;key() == 17825792) <span class="comment">// tastatur '1'</span>
{
mc-&gt;zoomIn();
}
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt-&gt;key() == 50)
{
mc-&gt;moveTo(QPointF(8.25, 60));
}
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt-&gt;key() == 51 || evnt-&gt;key() == 16777313) <span class="comment">// tastatur '3'</span>
{
mc-&gt;zoomOut();
}
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt-&gt;key() == 54) <span class="comment">// 6</span>
{
mc-&gt;setView(QPointF(8,50));
}
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt-&gt;key() == 16777234) <span class="comment">// left</span>
{
mc-&gt;scrollLeft();
}
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt-&gt;key() == 16777236) <span class="comment">// right</span>
{
mc-&gt;scrollRight();
}
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt-&gt;key() == 16777235 ) <span class="comment">// up</span>
{
mc-&gt;scrollUp();
}
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt-&gt;key() == 16777237) <span class="comment">// down</span>
{
mc-&gt;scrollDown();
}
<span class="keywordflow">else</span> <span class="keywordflow">if</span> (evnt-&gt;key() == 48 || evnt-&gt;key() == 17825797) <span class="comment">// 0</span>
{
emit(close());
}
<span class="keywordflow">else</span>
{
qDebug() &lt;&lt; evnt-&gt;key() &lt;&lt; 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&nbsp;
<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>