<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Matthias Pospiech &#187; C++</title>
	<atom:link href="http://www.matthiaspospiech.de/blog/category/c-plusplus/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.matthiaspospiech.de</link>
	<description></description>
	<lastBuildDate>Mon, 31 May 2010 19:37:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>fixes for Qt plugin makefiles</title>
		<link>http://www.matthiaspospiech.de/blog/2010/01/28/fixes-for-qt-plugin-makefiles/</link>
		<comments>http://www.matthiaspospiech.de/blog/2010/01/28/fixes-for-qt-plugin-makefiles/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 22:51:53 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/?p=471</guid>
		<description><![CDATA[There are many usefull Qt plugins, such as qwt, qextserialport, qxt and others. With a new major version of Qt, or a new version of a compiler I have to recompile the plugins to make sure everything is working well together. However many plugins are not compilable from comandline such that the resulting files can [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>There are many usefull Qt plugins, such as qwt, qextserialport, qxt and others. With a new major version of Qt, or a new version of a compiler I have to recompile the plugins to make sure everything is working well together. However many plugins are not compilable from comandline such that the resulting files can easily be deployed. Also they should be compilable with mingw and msvc.
</p>
<p>Here I show the necessary modifications to enable compilation of everything necessary in a naming scheme for windows.</p>

<span id="more-471"></span>

<h3 id="toc-wwwidgets">wwWidgets</h3>
<p>The current release has a wwwidgets.pro file error that needs to be fixed otherwise compilation fails:</p>


<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">-unix:TARGET = $$join<span style="">&#40;</span>TARGET,,,d<span style="">&#41;</span>
<span style="color: #00b000;">+win32:TARGET = $$join<span style="">&#40;</span>TARGET,,,d<span style="">&#41;</span></span></pre></div></div>



<p>apart from that it contains the necessary steps to build debug and release and name them different</p>


<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">CONFIG += debug_and_release
CONFIG += build_all</pre></div></div>




<p>Unfortunately the examples can only be compiled after system wide installation of the library. This can be fixed by adding a file <code>common.pro</code> with the content</p>


<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">INCLUDEPATH += ../../../../../include/qt/wwwidgets \
&nbsp;
CONFIG += release
CONFIG -= debug
&nbsp;
LIBS += -lwwwidgets4 -L../../widgets/release</pre></div></div>



<p>Please note that here all header files were manually moved to <code>.../include/qt/wwwidgets</code></p>

<p>This <code>common.pri</code> is then called in every pro file of the examples, here <code>widgetgallery.pro</code></p>


<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">FORMS += gallery.ui
TEMPLATE = app
CONFIG += wwwidgets
SOURCES += main.cpp
&nbsp;
include(../common.pri)</pre></div></div>




<h3 id="toc-qwtplot3d">qwtPlot3D</h3>
<p>This library has many problems. Its qmake files are only designed for msvc and the code does not compile. Additionally it can not be used to build debug and release builds.</p>

<p><code>qwtplot3d.pro</code></p>


<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">-CONFIG           += qt warn_on opengl thread zlib debug
<span style="color: #00b000;">+CONFIG           += qt warn_on opengl thread zlib</span>
<span style="color: #00b000;">+CONFIG           += debug_and_release</span>
<span style="color: #00b000;">+CONFIG           += build_all</span>
&nbsp;
<span style="color: #991111;">-win32:TEMPLATE    = vclib</span>
<span style="color: #00b000;">+win32:TEMPLATE    = lib</span>
&nbsp;
<span style="color: #00b000;">+CONFIG<span style="">&#40;</span>debug, debug|release<span style="">&#41;</span> <span style="">&#123;</span></span>
<span style="color: #00b000;">+  win32:TARGET = $$join<span style="">&#40;</span>TARGET,,,d<span style="">&#41;</span></span>
<span style="color: #00b000;">+<span style="">&#125;</span></span></pre></div></div>




<p><code>examples/common.pro</code></p>


<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">-CONFIG      += qt warn_on thread debug
<span style="color: #00b000;">+CONFIG      += qt warn_on thread release</span>
<span style="color: #00b000;">+CONFIG      -= debug</span>
&nbsp;
win32<span style="">&#123;</span>
<span style="color: #991111;">-  LIBS += ../../lib/qwtplot3d.lib</span>
<span style="color: #00b000;">+  LIBS += -lqwtplot3d -L../../lib</span>
<span style="color: #991111;">-  TEMPLATE  = vcapp</span>
<span style="color: #00b000;">+  TEMPLATE  = app</span></pre></div></div>




<p><code>src/qwt3d_function.cpp</code></p>


<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">+#include &lt;stdio.h&gt;</pre></div></div>




<h3 id="toc-qwt">Qwt</h3>
Here only the following needs to be enabled in <code>qwtconfig.pri</code>


<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">CONFIG += debug_and_release
CONFIG += build_all</pre></div></div>




<p>With Qt 4.6.x is does not compile. To fix this the following needs to be changed in <code>qwt_valuelist.h</code>. See <a href="http://www.qtcentre.org/threads/24721-qHash%28double%29-problem-with-Qt-4-6-%28tp1%29" class="liexternal">this</a> for discussion of the problem.</p>


<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">-#if defined<span style="">&#40;</span>QWT_TEMPLATEDLL<span style="">&#41;</span>
<span style="color: #991111;">-#if QT_VERSION &lt; 0x040300</span>
<span style="color: #00b000;">+#if defined<span style="">&#40;</span>QWT_TEMPLATEDLL<span style="">&#41;</span> &amp;&amp; QT_VERSION &lt; 0x040600</span>
<span style="color: #00b000;">+#if QT_VERSION == 0x040600</span></pre></div></div>





<h3 id="toc-qextserialport">QextSerialPort</h3>

<p>Usual changes for the pro files, here <code>qextserialport.pro</code>. The examples project however has no chance to compile without the changes. Remove:</p>


<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">CONFIG                 -= debug_and_release
#CONFIG                 += debug
CONFIG                 += release</pre></div></div>




<p>and replace by</p>


<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">CONFIG                 += debug_and_release
CONFIG           	   += build_all</pre></div></div>




<p>also adding at the end</p>


<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">CONFIG(debug, debug|release) {
  win32:TARGET = $$join(TARGET,,,d)
}</pre></div></div>




<p>The examples file <code>QESPTA.pro</code> is missing correct config and library path specification</p>


<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">+CONFIG           += release     
<span style="color: #00b000;">+CONFIG           -= debug     </span>
<span style="color: #991111;">-LIBS          += -lqextserialport</span>
<span style="color: #00b000;">+LIBS          += -lqextserialport -L../../</span></pre></div></div>




<code>examples/qespta/MessageWindow.h</code><p>


<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">+#include &lt;stdio.h&gt;</pre></div></div>





<h3 id="toc-qcodeedit">QCodeEdit</h3>

Removed the following line from <code>qcodeedit.pro</code>, because it is never used anyway


<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">CONFIG += debug</pre></div></div>




I changed the deploy configuration in <code>lib.pro</code>


<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">-DESTDIR = ..
<span style="color: #991111;">-CONFIG += debug</span>
<span style="color: #00b000;">+win32<span style="">&#123;</span></span>
<span style="color: #00b000;">+    CONFIG           += debug_and_release</span>
<span style="color: #00b000;">+    CONFIG           += build_all</span>
<span style="color: #00b000;">+    debug:DESTDIR = ../deploy/lib/debug</span>
<span style="color: #00b000;">+    release:DESTDIR = ../deploy/lib/release</span>
<span style="color: #00b000;">+<span style="">&#125;</span> else <span style="">&#123;</span></span>
<span style="color: #00b000;">+    DESTDIR = ..</span>
<span style="color: #00b000;">+<span style="">&#125;</span></span></pre></div></div>



<p>this required similar changes in further files, <code>example.pro</code></p>


<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">-CONFIG += debug console
<span style="color: #00b000;">+CONFIG += release</span>
<span style="color: #00b000;">+CONFIG -= debug</span>
&nbsp;
<span style="color: #991111;">-LIBS += -L.. -lqcodeedit</span>
<span style="color: #00b000;">+win32<span style="">&#123;</span></span>
<span style="color: #00b000;">+	debug:LIBS += -L../deploy/lib/debug -lqcodeedit</span>
<span style="color: #00b000;">+	release:LIBS += -L../deploy/lib/release -lqcodeedit</span>
<span style="color: #00b000;">+<span style="">&#125;</span> else <span style="">&#123;</span></span>
<span style="color: #00b000;">+	LIBS += -L.. -lqcodeedit</span>
<span style="color: #00b000;">+<span style="">&#125;</span></span></pre></div></div>



<p>and equivalent in <code>designer-plugin.pro</code></p>

<h3 id="toc-qxt">Qxt</h3>
<p>required no changes at all.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2010/01/28/fixes-for-qt-plugin-makefiles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows SDK 7 messed up</title>
		<link>http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/</link>
		<comments>http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 17:33:45 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Windows SDK]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/?p=465</guid>
		<description><![CDATA[I am trying to set up the Windows SDK environment for compilation of an other C++ project (Qt phonon library).
However the script seems to be totally broken. It does not work and destroys the path variable.

This is what the path looks like before anything is called:


C:\Users\Matthias&#62;PATH
PATH=C:\Program Files\PC Connectivity Solution\;C:\Program Files\MiKTeX 2.8\mikt
ex\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System
32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;
C:\Program Files\TortoiseSVN\bin;C:\Program [...]


Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/' rel='bookmark' title='Permanent Link: Compilation of Phonon under Windows XP'>Compilation of Phonon under Windows XP</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/' rel='bookmark' title='Permanent Link: free Qt Visual Studio Integration'>free Qt Visual Studio Integration</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2008/02/12/qt-ides/' rel='bookmark' title='Permanent Link: Qt IDEs'>Qt IDEs</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I am trying to set up the Windows SDK environment for compilation of an other C++ project (Qt phonon library).
However the script seems to be totally broken. It does not work and destroys the path variable.
</p>
<p>This is what the path looks like before anything is called:</p>


<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">C:\Users\Matthias&gt;PATH
PATH=C:\Program Files\PC Connectivity Solution\;C:\Program Files\MiKTeX <span style="color: #cc66cc;">2.8</span>\mikt
ex\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System
<span style="color: #cc66cc;">32</span>\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft SQL Server\<span style="color: #cc66cc;">90</span>\Tools\binn\;
C:\Program Files\TortoiseSVN\bin;C:\Program Files\doxygen\bin;C:\Program Files\C
ommon Files\Roxio Shared\<span style="color: #cc66cc;">9.0</span>\DLLShared\;C:\Program Files\MATLAB\R2008a\bin;C:\Pr
ogram Files\MATLAB\R2008a\bin\win32;C:\Program Files\ispell;C:\Program Files\gs\
gs8.63\bin;C:\Program Files\gnuplot\bin;&quot;C:\Program Files\Microsoft SDKs\Windows
\v7.0\bin&quot;;&quot;C:\Program Files\Microsoft Visual Studio <span style="color: #cc66cc;">8</span>\VC\bin&quot;</pre></div></div>




<p>If I call <code>SetEnv.cmd</code> it is messed up:</p>


<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">C:\Users\Matthias&gt;SetEnv.cmd
C:\Users\Matthias&gt;PATH
PATH=;C:\Program Files\Microsoft Visual Studio 9.0vcpackages;C:\Program Files\Mi
crosoft Visual Studio <span style="color: #cc66cc;">9.0</span>\Common7\IDE;C:\Program Files\Microsoft SDKs\Windows\v7
.0\Bin;C:\Windows\Microsoft.NET\Framework\v3.5;C:\Windows\Microsoft.NET\Framewor
k\v2.0.50727;!Path!</pre></div></div>




<p>Apart from that the script fails to find the compilers, though the SDK was installed completely.</p>


<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">The x86 compilers are <span style="color: #000000; font-weight: bold;">not</span> currently installed.
Please go to Add/Remove Programs to update your installation.
.
Setting SDK environment relative to C:\Program Files\Microsoft SDKs\Windows\v7.0
.
Das Sprungziel - Set_x86 wurde nicht gefunden.</pre></div></div>




Debugging the code that is throwing this error the following seems to happen


<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;"><span style="color: #b1b100; font-weight: bold;">SET</span> <span style="color: #448844;">&quot;VCRoot</span>=<span style="color: #33cc33;">%</span><span style="color: #448888;">ProgramFiles</span><span style="color: #33cc33;">%</span>\Microsoft Visual Studio <span style="color: #cc66cc;">9.0</span>&quot;
<span style="color: #b1b100; font-weight: bold;">SET</span> <span style="color: #448844;">&quot;VCTools</span>=<span style="color: #33cc33;">%</span><span style="color: #448888;">VCRoot</span><span style="color: #33cc33;">%</span>Bin&quot;
<span style="color: #00b100; font-weight: bold;">IF</span> <span style="color: #000000; font-weight: bold;">NOT</span> <span style="color: #000000; font-weight: bold;">EXIST</span> &quot;<span style="color: #33cc33;">%</span><span style="color: #448888;">VCTools</span><span style="color: #33cc33;">%</span>\cl.exe&quot; <span style="color: #66cc66;">&#40;</span>
  <span style="color: #b1b100; font-weight: bold;">SET</span> <span style="color: #448844;">VCTools</span>=
  <span style="color: #b1b100; font-weight: bold;">ECHO</span> The x86 compilers are <span style="color: #000000; font-weight: bold;">not</span> currently installed.
  <span style="color: #b1b100; font-weight: bold;">ECHO</span> Please go to Add/Remove Programs to update your installation.
  <span style="color: #b1b100; font-weight: bold;">ECHO</span> .
<span style="color: #66cc66;">&#41;</span></pre></div></div>



So the script if looking for <code>C:\Program Files\Microsoft Visual Studio 9.0\Bin\cl.exe</code> &#8211; which does not exist, because there is no bin path. The correct path would be <code>C:\Program Files\Microsoft Visual Studio 9.0\VC\bin</code>.

<p>If anyone has any idea, that would be helpfull.</p>

<p>Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/' rel='bookmark' title='Permanent Link: Compilation of Phonon under Windows XP'>Compilation of Phonon under Windows XP</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/' rel='bookmark' title='Permanent Link: free Qt Visual Studio Integration'>free Qt Visual Studio Integration</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2008/02/12/qt-ides/' rel='bookmark' title='Permanent Link: Qt IDEs'>Qt IDEs</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Books on Computational Physics</title>
		<link>http://www.matthiaspospiech.de/blog/2009/06/25/books-on-computational-physics/</link>
		<comments>http://www.matthiaspospiech.de/blog/2009/06/25/books-on-computational-physics/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 08:05:59 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/blog/2009/06/25/books-on-computational-physics/</guid>
		<description><![CDATA[A list of recommended books


	A Survey of Computational PhysicsRubin H. Landau, Manuel José and Cristian C. BordeianuLanguage: Java
	An Introduction into Computational Physics (2nd edition)Tao PangLanguage: Java
	Introductory Computational PhysicsAndi Klein and Alexander GodunovNo code (expect appendix with C++)
	Computational Physics and Object-Oriented Programming with C++David Yevick





Related posts:Books to read



Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2007/03/06/mfc-books-to-read/' rel='bookmark' title='Permanent Link: Books to read'>Books to read</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>A list of recommended books</p>

<ul>
	<li><strong>A Survey of Computational Physics</strong><br />Rubin H. Landau, Manuel José and Cristian C. Bordeianu<br />Language: Java</li>
	<li><strong>An Introduction into Computational Physics (2nd edition)</strong><br />Tao Pang<br />Language: Java</li>
	<li><strong>Introductory Computational Physics</strong><br />Andi Klein and Alexander Godunov<br />No code (expect appendix with C++)</li>
	<li><strong>Computational Physics and Object-Oriented Programming with C++</strong><br />David Yevick</li>
</ul>




<p>Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2007/03/06/mfc-books-to-read/' rel='bookmark' title='Permanent Link: Books to read'>Books to read</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2009/06/25/books-on-computational-physics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Qt SpinBox Widget with Scientific Notation</title>
		<link>http://www.matthiaspospiech.de/blog/2009/01/03/qt-spinbox-widget-with-scientific-notation/</link>
		<comments>http://www.matthiaspospiech.de/blog/2009/01/03/qt-spinbox-widget-with-scientific-notation/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 14:33:33 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Qt]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/blog/2009/01/03/qt-spinbox-widget-with-scientific-notation/</guid>
		<description><![CDATA[QScienceSpinBox
Since I started using Qt over a year ago I have been asking and looking for a Qt widget that can handle numbers in a scientific notation. Unfortunately Qt Software does not offer such a solution nor is it trivial to implement. With the hints I got in some public web forums I implementet the [...]


Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2008/06/16/qwt-spectrogramm-plot-with-data-arrays/' rel='bookmark' title='Permanent Link: qwt spectrogramm plot with data arrays'>qwt spectrogramm plot with data arrays</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2007/04/27/mfc-flicker-free-example-with-cstatic-control/' rel='bookmark' title='Permanent Link: Flicker Free example with CStatic Control'>Flicker Free example with CStatic Control</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2007/04/26/mfc-flicker-free-example-with-dialog/' rel='bookmark' title='Permanent Link: Flicker Free example with dialog'>Flicker Free example with dialog</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3 id="toc-qsciencespinbox">QScienceSpinBox</h3>
<p>Since I started using Qt over a year ago I have been asking and looking for a Qt widget that can handle numbers in a scientific notation. Unfortunately Qt Software does not offer such a solution nor is it trivial to implement. With the hints I got in some public web forums I implementet the solution provided here.</p>

<p>This widget is derived from QDoubleSpinBox. It uses a decimal value of 1000 (that is more decimal points than a double can handle) and implements a new decimal value for the presentation in scientific notation. The Validator is realised by setting the LineEdit to a <code>QDoubleValidator::ScientificNotation</code>. However the most important part is the reimplementation of <code>textFromValue</code> and <code>valueFromText</code>. This unfortunately requires to copy the whole validation code of QDoubleSpinBox, which can not be borrowed and represents the major part of the code.</p>

<p>If someone can show a shrinked but still functional equivalent version that would be great. In the end I think that it would be better if such a solution would be included into a Qt release, especially because in its current form I use so much of their code.</p>

<h3 id="toc-sample-project">Sample Project</h3>
<ul>
	<li><a href="/download/cpp/QScienceSpinBox.zip" class="lizip">QScienceSpinBox.zip</a></li>
</ul>

<span id="more-196"></span>
<h3 id="toc-source-code"> Source Code</h3>

QScienceSpinBox.h


<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#ifndef __QScienceSpinBox_H__</span>
<span style="color: #339900;">#define __QScienceSpinBox_H__</span>
&nbsp;
<span style="color: #339900;">#include &lt;QtGui/QDoubleSpinBox&gt;</span>
<span style="color: #339900;">#include &lt;QtGui/QDoubleValidator&gt;</span>
<span style="color: #339900;">#include &lt;QtGui/QLineEdit&gt;</span>
<span style="color: #339900;">#include &lt;QtCore/QVariant&gt;</span>
<span style="color: #339900;">#include &lt;QtCore/QDebug&gt;</span>
<span style="color: #339900;">#include &lt;QtCore/QString&gt;</span>
&nbsp;
<span style="color: #0000ff;">static</span> <span style="color: #0000ff;">bool</span> isIntermediateValueHelper<span style="color: #008000;">&#40;</span>qint64 num, qint64 minimum, qint64 maximum, qint64 <span style="color: #000040;">*</span>match <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> QScienceSpinBox <span style="color: #008080;">:</span> <span style="color: #0000ff;">public</span> QDoubleSpinBox
<span style="color: #008000;">&#123;</span>
Q_OBJECT
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
    QScienceSpinBox<span style="color: #008000;">&#40;</span>QWidget <span style="color: #000040;">*</span> parent <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">int</span> decimals<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">void</span> setDecimals<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> value<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    QString textFromValue <span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">double</span> value <span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> valueFromText <span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">const</span> QString <span style="color: #000040;">&amp;</span> text <span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
	<span style="color: #0000ff;">int</span> dispDecimals<span style="color: #008080;">;</span>
    QChar delimiter, thousand<span style="color: #008080;">;</span>
	QDoubleValidator <span style="color: #000040;">*</span> v<span style="color: #008080;">;</span>
&nbsp;
&nbsp;
<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
	<span style="color: #0000ff;">void</span> initLocalValues<span style="color: #008000;">&#40;</span>QWidget <span style="color: #000040;">*</span>parent<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">bool</span> isIntermediateValue<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> QString <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span><span style="color: #008080;">;</span>
    QVariant validateAndInterpret<span style="color: #008000;">&#40;</span>QString <span style="color: #000040;">&amp;</span>input, <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>pos, QValidator<span style="color: #008080;">::</span><span style="color: #007788;">State</span> <span style="color: #000040;">&amp;</span>state<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span><span style="color: #008080;">;</span>
	QValidator<span style="color: #008080;">::</span><span style="color: #007788;">State</span> validate<span style="color: #008000;">&#40;</span>QString <span style="color: #000040;">&amp;</span>text, <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>pos<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">void</span> fixup<span style="color: #008000;">&#40;</span>QString <span style="color: #000040;">&amp;</span>input<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span><span style="color: #008080;">;</span>
	QString stripped<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> QString <span style="color: #000040;">&amp;</span>t, <span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span>pos<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> round<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> value<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">void</span> stepBy<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> steps<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">public</span> slots<span style="color: #008080;">:</span>
	<span style="color: #0000ff;">void</span> stepDown<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">void</span> stepUp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #339900;">#endif</span></pre></div></div>




QScienceSpinBox.cpp


<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &quot;QScienceSpinBox.h&quot;</span>
&nbsp;
<span style="color: #339900;">#include &lt;limits&gt;</span>
&nbsp;
<span style="color: #666666;">//#define QSPINBOX_QSBDEBUG</span>
<span style="color: #339900;">#ifdef QSPINBOX_QSBDEBUG</span>
<span style="color: #339900;">#  define QSBDEBUG qDebug</span>
<span style="color: #339900;">#else</span>
<span style="color: #339900;">#  define QSBDEBUG if (false) qDebug</span>
<span style="color: #339900;">#endif</span>
&nbsp;
&nbsp;
QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">QScienceSpinBox</span><span style="color: #008000;">&#40;</span>QWidget <span style="color: #000040;">*</span> parent<span style="color: #008000;">&#41;</span>
    <span style="color: #008080;">:</span> QDoubleSpinBox<span style="color: #008000;">&#40;</span>parent<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	initLocalValues<span style="color: #008000;">&#40;</span>parent<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	setDecimals<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">8</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	QDoubleSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">setDecimals</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">// set Range to maximum possible values</span>
	<span style="color: #0000ff;">double</span> doubleMax <span style="color: #000080;">=</span> std<span style="color: #008080;">::</span><span style="color: #007788;">numeric_limits</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">double</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">max</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	setRange<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>doubleMax, doubleMax<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	v <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> QDoubleValidator<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">this</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	v<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>setDecimals<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// (standard anyway)</span>
	v<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>setNotation<span style="color: #008000;">&#40;</span>QDoubleValidator<span style="color: #008080;">::</span><span style="color: #007788;">ScientificNotation</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>lineEdit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>setValidator<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>		
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">initLocalValues</span><span style="color: #008000;">&#40;</span>QWidget <span style="color: #000040;">*</span>parent<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">const</span> QString str <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>parent <span style="color: #008080;">?</span> parent<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>locale<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008080;">:</span> QLocale<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toString</span><span style="color: #008000;">&#40;</span><span style="color:#800080;">4567.1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">6</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        delimiter <span style="color: #000080;">=</span> str.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        thousand <span style="color: #000080;">=</span> QChar<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>ushort<span style="color: #008000;">&#41;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">7</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        thousand <span style="color: #000080;">=</span> str.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        delimiter <span style="color: #000080;">=</span> str.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">5</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    Q_ASSERT<span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>delimiter.<span style="color: #007788;">isNull</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">decimals</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> dispDecimals<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">setDecimals</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> value<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	dispDecimals <span style="color: #000080;">=</span> value<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// overwritten virtual function of QAbstractSpinBox</span>
<span style="color: #0000ff;">void</span> QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">stepBy</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> steps<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>steps <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		stepDown<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		stepUp<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">stepDown</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;stepDown()&quot;</span><span style="color: #008080;">;</span>
	setValue<span style="color: #008000;">&#40;</span>value<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color:#800080;">10.0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">stepUp</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;stepUp()&quot;</span><span style="color: #008080;">;</span>
	setValue<span style="color: #008000;">&#40;</span>value<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color:#800080;">10.0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*!
 *  text to be displayed in spinbox
 */</span>
QString QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">textFromValue</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> value<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span>
<span style="color: #008000;">&#123;</span>
&nbsp;
	<span style="color: #666666;">// convert to string -&gt; Using exponetial display with internal decimals</span>
	QString str <span style="color: #000080;">=</span> locale<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toString</span><span style="color: #008000;">&#40;</span>value, <span style="color: #FF0000;">'e'</span>, dispDecimals<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">// remove thousand sign</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>qAbs<span style="color: #008000;">&#40;</span>value<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;=</span> <span style="color:#800080;">1000.0</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        str.<span style="color: #0000dd;">remove</span><span style="color: #008000;">&#40;</span>thousand<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> str<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">double</span> QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">valueFromText</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> QString <span style="color: #000040;">&amp;</span>text<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span>
<span style="color: #008000;">&#123;</span>
    QString copy <span style="color: #000080;">=</span> text<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> pos <span style="color: #000080;">=</span> this<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>lineEdit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>cursorPosition<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    QValidator<span style="color: #008080;">::</span><span style="color: #007788;">State</span> state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Acceptable</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> validateAndInterpret<span style="color: #008000;">&#40;</span>copy, pos, state<span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toDouble</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// this function is never used...?</span>
<span style="color: #0000ff;">double</span> QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">round</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> value<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">const</span> QString strDbl <span style="color: #000080;">=</span> locale<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toString</span><span style="color: #008000;">&#40;</span>value, <span style="color: #FF0000;">'g'</span>, dispDecimals<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> locale<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toDouble</span><span style="color: #008000;">&#40;</span>strDbl<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// overwritten virtual function of QAbstractSpinBox</span>
QValidator<span style="color: #008080;">::</span><span style="color: #007788;">State</span> QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">validate</span><span style="color: #008000;">&#40;</span>QString <span style="color: #000040;">&amp;</span>text, <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>pos<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span>
<span style="color: #008000;">&#123;</span>
    QValidator<span style="color: #008080;">::</span><span style="color: #007788;">State</span> state<span style="color: #008080;">;</span>
    validateAndInterpret<span style="color: #008000;">&#40;</span>text, pos, state<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> state<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// overwritten virtual function of QAbstractSpinBox</span>
<span style="color: #0000ff;">void</span> QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">fixup</span><span style="color: #008000;">&#40;</span>QString <span style="color: #000040;">&amp;</span>input<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span>
<span style="color: #008000;">&#123;</span>
    input.<span style="color: #0000dd;">remove</span><span style="color: #008000;">&#40;</span>thousand<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// reimplemented function, copied from QDoubleSpinBoxPrivate::isIntermediateValue</span>
<span style="color: #0000ff;">bool</span> QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">isIntermediateValue</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> QString <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span>
<span style="color: #008000;">&#123;</span>
    QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;input is&quot;</span> <span style="color: #000080;">&lt;&lt;</span> str <span style="color: #000080;">&lt;&lt;</span> minimum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> maximum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    qint64 dec <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>	
&nbsp;
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> decimals<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
        dec <span style="color: #000040;">*</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">const</span> QLatin1Char dot<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'.'</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #ff0000; font-style: italic;">/*!
	 * determine minimum possible values on left and right of Decimal-char
	 */</span>
	<span style="color: #666666;">// I know QString::number() uses CLocale so I use dot</span>
	<span style="color: #0000ff;">const</span> QString minstr <span style="color: #000080;">=</span> QString<span style="color: #008080;">::</span><span style="color: #007788;">number</span><span style="color: #008000;">&#40;</span>minimum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #FF0000;">'f'</span>, QDoubleSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">decimals</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    qint64 min_left <span style="color: #000080;">=</span> minstr.<span style="color: #007788;">left</span><span style="color: #008000;">&#40;</span>minstr.<span style="color: #007788;">indexOf</span><span style="color: #008000;">&#40;</span>dot<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toLongLong</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    qint64 min_right <span style="color: #000080;">=</span> minstr.<span style="color: #007788;">mid</span><span style="color: #008000;">&#40;</span>minstr.<span style="color: #007788;">indexOf</span><span style="color: #008000;">&#40;</span>dot<span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toLongLong</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">const</span> QString maxstr <span style="color: #000080;">=</span> QString<span style="color: #008080;">::</span><span style="color: #007788;">number</span><span style="color: #008000;">&#40;</span>maximum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #FF0000;">'f'</span>, QDoubleSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">decimals</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    qint64 max_left <span style="color: #000080;">=</span> maxstr.<span style="color: #007788;">left</span><span style="color: #008000;">&#40;</span>maxstr.<span style="color: #007788;">indexOf</span><span style="color: #008000;">&#40;</span>dot<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toLongLong</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    qint64 max_right <span style="color: #000080;">=</span> maxstr.<span style="color: #007788;">mid</span><span style="color: #008000;">&#40;</span>maxstr.<span style="color: #007788;">indexOf</span><span style="color: #008000;">&#40;</span>dot<span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toLongLong</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #ff0000; font-style: italic;">/*!
	 * determine left and right long values (left and right of delimiter)
	 */</span>
	<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> dotindex <span style="color: #000080;">=</span> str.<span style="color: #007788;">indexOf</span><span style="color: #008000;">&#40;</span>delimiter<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">bool</span> negative <span style="color: #000080;">=</span> maximum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    qint64 left <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span>, right <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">bool</span> doleft <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">bool</span> doright <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #666666;">// no separator -&gt; everthing in left</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dotindex <span style="color: #000080;">==</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        left <span style="color: #000080;">=</span> str.<span style="color: #007788;">toLongLong</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        doright <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
	<span style="color: #666666;">// separator on left or contains '+'</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dotindex <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>dotindex <span style="color: #000080;">==</span> <span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> str.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> QLatin1Char<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'+'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #666666;">// '+' at negative max</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>negative<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__ <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;returns false&quot;</span><span style="color: #008080;">;</span>
            <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        doleft <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
        right <span style="color: #000080;">=</span> str.<span style="color: #007788;">mid</span><span style="color: #008000;">&#40;</span>dotindex <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toLongLong</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
	<span style="color: #666666;">// contains '-'	</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dotindex <span style="color: #000080;">==</span> <span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> str.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> QLatin1Char<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'-'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
		<span style="color: #666666;">// '-' at positiv max</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>negative<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__ <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;returns false&quot;</span><span style="color: #008080;">;</span>
            <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        doleft <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
        right <span style="color: #000080;">=</span> str.<span style="color: #007788;">mid</span><span style="color: #008000;">&#40;</span>dotindex <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toLongLong</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
        left <span style="color: #000080;">=</span> str.<span style="color: #007788;">left</span><span style="color: #008000;">&#40;</span>dotindex<span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toLongLong</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dotindex <span style="color: #000080;">==</span> str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #666666;">// nothing right of Separator</span>
            doright <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
            right <span style="color: #000080;">=</span> str.<span style="color: #007788;">mid</span><span style="color: #008000;">&#40;</span>dotindex <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">toLongLong</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
	<span style="color: #666666;">// left &gt; 0, with max &lt; 0 and no '-'</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>left <span style="color: #000080;">&gt;=</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> max_left <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>str.<span style="color: #007788;">startsWith</span><span style="color: #008000;">&#40;</span>QLatin1Char<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'-'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> 
	<span style="color: #666666;">// left &gt; 0, with min &gt; 0 </span>
		<span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>left <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> min_left <span style="color: #000080;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> 
	<span style="color: #008000;">&#123;</span>
        QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;returns false&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    qint64 match <span style="color: #000080;">=</span> min_left<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>doleft <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>isIntermediateValueHelper<span style="color: #008000;">&#40;</span>left, min_left, max_left, <span style="color: #000040;">&amp;</span>match<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__ <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;returns false&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>doright<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;match %lld min_left %lld max_left %lld&quot;</span>, match, min_left, max_left<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>doleft<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>min_left <span style="color: #000080;">==</span> max_left<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">bool</span> ret <span style="color: #000080;">=</span> isIntermediateValueHelper<span style="color: #008000;">&#40;</span>qAbs<span style="color: #008000;">&#40;</span>left<span style="color: #008000;">&#41;</span>,
                                                           negative <span style="color: #008080;">?</span> max_right <span style="color: #008080;">:</span> min_right,
                                                           negative <span style="color: #008080;">?</span> min_right <span style="color: #008080;">:</span> max_right<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__ <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;returns&quot;</span> <span style="color: #000080;">&lt;&lt;</span> ret<span style="color: #008080;">;</span>
                <span style="color: #0000ff;">return</span> ret<span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>qAbs<span style="color: #008000;">&#40;</span>max_left <span style="color: #000040;">-</span> min_left<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">bool</span> ret <span style="color: #000080;">=</span> isIntermediateValueHelper<span style="color: #008000;">&#40;</span>qAbs<span style="color: #008000;">&#40;</span>left<span style="color: #008000;">&#41;</span>, min_right, negative <span style="color: #008080;">?</span> <span style="color: #0000dd;">0</span> <span style="color: #008080;">:</span> dec<span style="color: #008000;">&#41;</span>
                                 <span style="color: #000040;">||</span> isIntermediateValueHelper<span style="color: #008000;">&#40;</span>qAbs<span style="color: #008000;">&#40;</span>left<span style="color: #008000;">&#41;</span>, negative <span style="color: #008080;">?</span> dec <span style="color: #008080;">:</span> <span style="color: #0000dd;">0</span>, max_right<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__ <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;returns&quot;</span> <span style="color: #000080;">&lt;&lt;</span> ret<span style="color: #008080;">;</span>
                <span style="color: #0000ff;">return</span> ret<span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">bool</span> ret <span style="color: #000080;">=</span> isIntermediateValueHelper<span style="color: #008000;">&#40;</span>qAbs<span style="color: #008000;">&#40;</span>left<span style="color: #008000;">&#41;</span>, <span style="color: #0000dd;">0</span>, dec<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__ <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;returns&quot;</span> <span style="color: #000080;">&lt;&lt;</span> ret<span style="color: #008080;">;</span>
                <span style="color: #0000ff;">return</span> ret<span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>match <span style="color: #000040;">!</span><span style="color: #000080;">=</span> min_left<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            min_right <span style="color: #000080;">=</span> negative <span style="color: #008080;">?</span> dec <span style="color: #008080;">:</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>match <span style="color: #000040;">!</span><span style="color: #000080;">=</span> max_left<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            max_right <span style="color: #000080;">=</span> negative <span style="color: #008080;">?</span> <span style="color: #0000dd;">0</span> <span style="color: #008080;">:</span> dec<span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        qint64 tmpl <span style="color: #000080;">=</span> negative <span style="color: #008080;">?</span> max_right <span style="color: #008080;">:</span> min_right<span style="color: #008080;">;</span>
        qint64 tmpr <span style="color: #000080;">=</span> negative <span style="color: #008080;">?</span> min_right <span style="color: #008080;">:</span> max_right<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">bool</span> ret <span style="color: #000080;">=</span> isIntermediateValueHelper<span style="color: #008000;">&#40;</span>right, tmpl, tmpr<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__ <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;returns&quot;</span> <span style="color: #000080;">&lt;&lt;</span> ret<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span> ret<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__ <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;returns true&quot;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*!
    \internal Multi purpose function that parses input, sets state to
    the appropriate state and returns the value it will be interpreted
    as.
*/</span>
<span style="color: #666666;">// reimplemented function, copied from QDoubleSpinBoxPrivate::validateAndInterpret</span>
QVariant QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">validateAndInterpret</span><span style="color: #008000;">&#40;</span>
	QString <span style="color: #000040;">&amp;</span>input, 
	<span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>pos,
    QValidator<span style="color: #008080;">::</span><span style="color: #007788;">State</span> <span style="color: #000040;">&amp;</span>state<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #ff0000; font-style: italic;">/*! return 'cachedText' if
	 *   input = cachedText, or input Empty
     */</span>
&nbsp;
	<span style="color: #0000ff;">static</span> QString cachedText<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">static</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">State</span> cachedState<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">static</span> QVariant cachedValue<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>cachedText <span style="color: #000080;">==</span> input <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>input.<span style="color: #007788;">isEmpty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        state <span style="color: #000080;">=</span> cachedState<span style="color: #008080;">;</span>
        QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;cachedText was&quot;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;'&quot;</span> <span style="color: #000080;">&lt;&lt;</span> cachedText <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;'&quot;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state was &quot;</span>
                   <span style="color: #000080;">&lt;&lt;</span> state <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; and value was &quot;</span> <span style="color: #000080;">&lt;&lt;</span> cachedValue<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span> cachedValue<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> max <span style="color: #000080;">=</span> maximum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> min <span style="color: #000080;">=</span> minimum<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">// removes prefix &amp; suffix</span>
    QString copy <span style="color: #000080;">=</span> stripped<span style="color: #008000;">&#40;</span>input, <span style="color: #000040;">&amp;</span>pos<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;input&quot;</span> <span style="color: #000080;">&lt;&lt;</span> input <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;copy&quot;</span> <span style="color: #000080;">&lt;&lt;</span> copy<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">int</span> len <span style="color: #000080;">=</span> copy.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> num <span style="color: #000080;">=</span> min<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">bool</span> plus <span style="color: #000080;">=</span> max <span style="color: #000080;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">bool</span> minus <span style="color: #000080;">=</span> min <span style="color: #000080;">&lt;=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">// Test possible 'Intermediate' reasons</span>
	<span style="color: #0000ff;">switch</span> <span style="color: #008000;">&#40;</span>len<span style="color: #008000;">&#41;</span> 
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">case</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">:</span>
			<span style="color: #666666;">// Length 0 is always 'Intermediate', except for min=max</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>max <span style="color: #000040;">!</span><span style="color: #000080;">=</span> min<span style="color: #008000;">&#41;</span>	<span style="color: #008000;">&#123;</span>
				state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Intermediate</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
				state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">goto</span> end<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">case</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">:</span>
			<span style="color: #666666;">// if only char is '+' or '-'</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> delimiter
				<span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>plus <span style="color: #000040;">&amp;&amp;</span> copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> QLatin1Char<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'+'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>minus <span style="color: #000040;">&amp;&amp;</span> copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> QLatin1Char<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'-'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
				state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Intermediate</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">goto</span> end<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">case</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">:</span>
			<span style="color: #666666;">// if only chars are '+' or '-' followed by Comma seperator (delimiter)</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> delimiter
				<span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>plus <span style="color: #000040;">&amp;&amp;</span> copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> QLatin1Char<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'+'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>minus <span style="color: #000040;">&amp;&amp;</span> copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> QLatin1Char<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'-'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
				state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Intermediate</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">goto</span> end<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">default</span><span style="color: #008080;">:</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span> <span style="color: #666666;">// end switch</span>
&nbsp;
&nbsp;
    <span style="color: #666666;">// First char must not be thousand-char</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> thousand<span style="color: #008000;">&#41;</span> 
	<span style="color: #008000;">&#123;</span>
        QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to Invalid&quot;</span><span style="color: #008080;">;</span>
        state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">goto</span> end<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
	<span style="color: #666666;">// Test possible 'Invalid' reasons</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>len <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> 
	<span style="color: #008000;">&#123;</span>		
        <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> dec <span style="color: #000080;">=</span> copy.<span style="color: #007788;">indexOf</span><span style="color: #008000;">&#40;</span>delimiter<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// position of delimiter</span>
        <span style="color: #666666;">// if decimal separator (delimiter) exists</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dec <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #666666;">// not two delimiters after one other (meaning something like ',,')</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dec <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span> <span style="color: #000080;">&lt;</span> copy.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span>dec <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> delimiter <span style="color: #000040;">&amp;&amp;</span> pos <span style="color: #000080;">==</span> dec <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                copy.<span style="color: #0000dd;">remove</span><span style="color: #008000;">&#40;</span>dec <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span>, <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// typing a delimiter when you are on the delimiter</span>
            <span style="color: #008000;">&#125;</span>							 <span style="color: #666666;">// should be treated as typing right arrow</span>
			<span style="color: #666666;">// too many decimal points</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>copy.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span> dec <span style="color: #000080;">&gt;</span> QDoubleSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">decimals</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to Invalid&quot;</span><span style="color: #008080;">;</span>
                state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
                <span style="color: #0000ff;">goto</span> end<span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
			<span style="color: #666666;">// after decimal separator no thousand char</span>
            <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span>dec <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>copy.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span>.<span style="color: #007788;">isSpace</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> thousand<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                    QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to Invalid&quot;</span><span style="color: #008080;">;</span>
                    state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
                    <span style="color: #0000ff;">goto</span> end<span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
		<span style="color: #666666;">// if no decimal separator exists</span>
        <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">const</span> QChar <span style="color: #000040;">&amp;</span>last <span style="color: #000080;">=</span> copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span>len <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #0000ff;">const</span> QChar <span style="color: #000040;">&amp;</span>secondLast <span style="color: #000080;">=</span> copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span>len <span style="color: #000040;">-</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #666666;">// group of two thousand or space chars is invalid</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>last <span style="color: #000080;">==</span> thousand <span style="color: #000040;">||</span> last.<span style="color: #007788;">isSpace</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
                <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>secondLast <span style="color: #000080;">==</span> thousand <span style="color: #000040;">||</span> secondLast.<span style="color: #007788;">isSpace</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
                QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to Invalid&quot;</span><span style="color: #008080;">;</span>
                <span style="color: #0000ff;">goto</span> end<span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span> 
			<span style="color: #666666;">// two space chars is invalid</span>
			<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>last.<span style="color: #007788;">isSpace</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>thousand.<span style="color: #007788;">isSpace</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> secondLast.<span style="color: #007788;">isSpace</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
                QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to Invalid&quot;</span><span style="color: #008080;">;</span>
                <span style="color: #0000ff;">goto</span> end<span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span> <span style="color: #666666;">// end if (len &gt; 1)</span>
&nbsp;
	<span style="color: #666666;">// block of remaining test before 'end' mark</span>
	<span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">bool</span> ok <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">bool</span> notAcceptable <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #666666;">// convert 'copy' to double, and check if that was 'ok'</span>
        QLocale loc<span style="color: #008000;">&#40;</span>locale<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        num <span style="color: #000080;">=</span> loc.<span style="color: #007788;">toDouble</span><span style="color: #008000;">&#40;</span>copy, <span style="color: #000040;">&amp;</span>ok<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__ <span style="color: #000080;">&lt;&lt;</span> loc <span style="color: #000080;">&lt;&lt;</span> copy <span style="color: #000080;">&lt;&lt;</span> num <span style="color: #000080;">&lt;&lt;</span> ok<span style="color: #008080;">;</span>
&nbsp;
&nbsp;
		<span style="color: #666666;">// conversion to double did fail</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>ok<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #666666;">// maybe thousand char was responsable</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>thousand.<span style="color: #007788;">isPrint</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> 
			<span style="color: #008000;">&#123;</span>
				<span style="color: #666666;">// if no thousand sign is possible, then</span>
				<span style="color: #666666;">// something else is responable -&gt; Invalid</span>
                <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>max <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">1000</span> <span style="color: #000040;">&amp;&amp;</span> min <span style="color: #000080;">&gt;</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1000</span> <span style="color: #000040;">&amp;&amp;</span> copy.<span style="color: #007788;">contains</span><span style="color: #008000;">&#40;</span>thousand<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                    state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
                    QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to Invalid&quot;</span><span style="color: #008080;">;</span>
                    <span style="color: #0000ff;">goto</span> end<span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>
&nbsp;
				<span style="color: #666666;">// two thousand-chars after one other are not valid</span>
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> len <span style="color: #000080;">=</span> copy.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>len<span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> thousand <span style="color: #000040;">&amp;&amp;</span> copy.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span>i <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> thousand<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                        QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to Invalid&quot;</span><span style="color: #008080;">;</span>
                        state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
                        <span style="color: #0000ff;">goto</span> end<span style="color: #008080;">;</span>
                    <span style="color: #008000;">&#125;</span>
                <span style="color: #008000;">&#125;</span>
&nbsp;
				<span style="color: #666666;">// remove thousand-chars</span>
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> s <span style="color: #000080;">=</span> copy.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                copy.<span style="color: #0000dd;">remove</span><span style="color: #008000;">&#40;</span>thousand<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                pos <span style="color: #000080;">=</span> qMax<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>, pos <span style="color: #000040;">-</span> <span style="color: #008000;">&#40;</span>s <span style="color: #000040;">-</span> copy.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
                num <span style="color: #000080;">=</span> loc.<span style="color: #007788;">toDouble</span><span style="color: #008000;">&#40;</span>copy, <span style="color: #000040;">&amp;</span>ok<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> thousand <span style="color: #000080;">&lt;&lt;</span> num <span style="color: #000080;">&lt;&lt;</span> copy <span style="color: #000080;">&lt;&lt;</span> ok<span style="color: #008080;">;</span>
&nbsp;
				<span style="color: #666666;">// if conversion still not valid, then reason unknown -&gt; Invalid</span>
                <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>ok<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                    state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
                    QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to Invalid&quot;</span><span style="color: #008080;">;</span>
                    <span style="color: #0000ff;">goto</span> end<span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>
                notAcceptable <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span> <span style="color: #666666;">// -&gt; state = Intermediate</span>
            <span style="color: #008000;">&#125;</span> <span style="color: #666666;">// endif: (thousand.isPrint())</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #666666;">// no thousand sign, but still invalid for unknown reason</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>ok<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
            QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to Invalid&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span> 
		<span style="color: #666666;">// number valid and within valid range</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>num <span style="color: #000080;">&gt;=</span> min <span style="color: #000040;">&amp;&amp;</span> num <span style="color: #000080;">&lt;=</span> max<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>notAcceptable<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
				state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Intermediate</span><span style="color: #008080;">;</span> <span style="color: #666666;">// conversion to num initially failed</span>
			<span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
				state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Acceptable</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
            QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to &quot;</span>
                       <span style="color: #000080;">&lt;&lt;</span> <span style="color: #008000;">&#40;</span>state <span style="color: #000080;">==</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Intermediate</span> <span style="color: #008080;">?</span> <span style="color: #FF0000;">&quot;Intermediate&quot;</span> <span style="color: #008080;">:</span> <span style="color: #FF0000;">&quot;Acceptable&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span> 
		<span style="color: #666666;">// when max and min is the same the only non-Invalid input is max (or min)</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>max <span style="color: #000080;">==</span> min<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> 
            state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
            QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to Invalid&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
			<span style="color: #666666;">// value out of valid range (coves only special cases)</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>num <span style="color: #000080;">&gt;=</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> num <span style="color: #000080;">&gt;</span> max<span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>num <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> num <span style="color: #000080;">&lt;</span> min<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                state <span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
                QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to Invalid&quot;</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
				<span style="color: #666666;">// invalid range, further test with 'isIntermediateValue'</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>isIntermediateValue<span style="color: #008000;">&#40;</span>copy<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
					state <span style="color: #000080;">=</span>  QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Intermediate</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
					state <span style="color: #000080;">=</span>  QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Invalid</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
                QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> __FILE__ <span style="color: #000080;">&lt;&lt;</span> __LINE__<span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;state is set to &quot;</span>
                           <span style="color: #000080;">&lt;&lt;</span> <span style="color: #008000;">&#40;</span>state <span style="color: #000080;">==</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Intermediate</span> <span style="color: #008080;">?</span> <span style="color: #FF0000;">&quot;Intermediate&quot;</span> <span style="color: #008080;">:</span> <span style="color: #FF0000;">&quot;Acceptable&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
end<span style="color: #008080;">:</span>
    <span style="color: #666666;">// if something went wrong, set num to something valid</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>state <span style="color: #000040;">!</span><span style="color: #000080;">=</span> QValidator<span style="color: #008080;">::</span><span style="color: #007788;">Acceptable</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        num <span style="color: #000080;">=</span> max <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span> <span style="color: #008080;">?</span> min <span style="color: #008080;">:</span> max<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #666666;">// save (private) cache values</span>
	cachedText <span style="color: #000080;">=</span> prefix<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> copy <span style="color: #000040;">+</span> suffix<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    cachedState <span style="color: #000080;">=</span> state<span style="color: #008080;">;</span>
    cachedValue <span style="color: #000080;">=</span> QVariant<span style="color: #008000;">&#40;</span>num<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #666666;">// return resulting valid num</span>
    <span style="color: #0000ff;">return</span> QVariant<span style="color: #008000;">&#40;</span>num<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*!
    \internal
    Strips any prefix/suffix from \a text.
*/</span>
<span style="color: #666666;">// reimplemented function, copied from QAbstractSpinBoxPrivate::stripped</span>
QString QScienceSpinBox<span style="color: #008080;">::</span><span style="color: #007788;">stripped</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> QString <span style="color: #000040;">&amp;</span>t, <span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span>pos<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">const</span>
<span style="color: #008000;">&#123;</span>
    QString text <span style="color: #000080;">=</span> t<span style="color: #008080;">;</span>
	QString prefixtext <span style="color: #000080;">=</span> prefix<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	QString suffixtext <span style="color: #000080;">=</span> suffix<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>specialValueText<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">||</span> text <span style="color: #000040;">!</span><span style="color: #000080;">=</span> specialValueText<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">int</span> from <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">int</span> size <span style="color: #000080;">=</span> text.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">bool</span> changed <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>prefixtext.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> text.<span style="color: #007788;">startsWith</span><span style="color: #008000;">&#40;</span>prefixtext<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            from <span style="color: #000040;">+</span><span style="color: #000080;">=</span> prefixtext.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            size <span style="color: #000040;">-</span><span style="color: #000080;">=</span> from<span style="color: #008080;">;</span>
            changed <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>suffixtext.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> text.<span style="color: #007788;">endsWith</span><span style="color: #008000;">&#40;</span>suffixtext<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            size <span style="color: #000040;">-</span><span style="color: #000080;">=</span> suffixtext.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            changed <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>changed<span style="color: #008000;">&#41;</span>
            text <span style="color: #000080;">=</span> text.<span style="color: #007788;">mid</span><span style="color: #008000;">&#40;</span>from, size<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> s <span style="color: #000080;">=</span> text.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    text <span style="color: #000080;">=</span> text.<span style="color: #007788;">trimmed</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pos<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>pos<span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>s <span style="color: #000040;">-</span> text.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> text<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// reimplemented function, copied from qspinbox.cpp</span>
<span style="color: #0000ff;">static</span> <span style="color: #0000ff;">bool</span> isIntermediateValueHelper<span style="color: #008000;">&#40;</span>qint64 num, qint64 min, qint64 max, qint64 <span style="color: #000040;">*</span>match<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lld %lld %lld&quot;</span>, num, min, max<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>num <span style="color: #000080;">&gt;=</span> min <span style="color: #000040;">&amp;&amp;</span> num <span style="color: #000080;">&lt;=</span> max<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>match<span style="color: #008000;">&#41;</span>
            <span style="color: #000040;">*</span>match <span style="color: #000080;">=</span> num<span style="color: #008080;">;</span>
        QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;returns true 0&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    qint64 tmp <span style="color: #000080;">=</span> num<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">int</span> numDigits <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> digits<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        numDigits <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
        digits<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>
        tmp <span style="color: #000080;">=</span> qAbs<span style="color: #008000;">&#40;</span>num<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> tmp <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            digits<span style="color: #008000;">&#91;</span>numDigits<span style="color: #000040;">++</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> tmp <span style="color: #000040;">%</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
            tmp <span style="color: #000040;">/</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #0000ff;">int</span> failures <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    qint64 number<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>number<span style="color: #000080;">=</span>max<span style="color: #008080;">;</span> number<span style="color: #000080;">&gt;=</span>min<span style="color: #008080;">;</span> <span style="color: #000040;">--</span>number<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        tmp <span style="color: #000080;">=</span> qAbs<span style="color: #008000;">&#40;</span>number<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> tmp <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>digits<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000040;">%</span> <span style="color: #0000dd;">10</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>i <span style="color: #000080;">==</span> numDigits<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
                    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>match<span style="color: #008000;">&#41;</span>
                        <span style="color: #000040;">*</span>match <span style="color: #000080;">=</span> number<span style="color: #008080;">;</span>
                    QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;returns true 1&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                    <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
            tmp <span style="color: #000040;">/</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>failures<span style="color: #000040;">++</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">500000</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #666666;">//upper bound</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>match<span style="color: #008000;">&#41;</span>
                <span style="color: #000040;">*</span>match <span style="color: #000080;">=</span> num<span style="color: #008080;">;</span>
            QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;returns true 2&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    QSBDEBUG<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;returns false&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>




<p>Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2008/06/16/qwt-spectrogramm-plot-with-data-arrays/' rel='bookmark' title='Permanent Link: qwt spectrogramm plot with data arrays'>qwt spectrogramm plot with data arrays</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2007/04/27/mfc-flicker-free-example-with-cstatic-control/' rel='bookmark' title='Permanent Link: Flicker Free example with CStatic Control'>Flicker Free example with CStatic Control</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2007/04/26/mfc-flicker-free-example-with-dialog/' rel='bookmark' title='Permanent Link: Flicker Free example with dialog'>Flicker Free example with dialog</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2009/01/03/qt-spinbox-widget-with-scientific-notation/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>free Qt Visual Studio Integration</title>
		<link>http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/</link>
		<comments>http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 15:33:49 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/</guid>
		<description><![CDATA[Volker Wiendl has released a new Version of his VsQtAddin Visual Studio Plugin:

	Download (Version for VS 2005)


In case you have a previous installed version uninstall it first, and make sure no component is remaining on the system. You may also run


&#34;C:\Programme\Microsoft Visual Studio 8\Common7\IDE\devenv.exe&#34; /resetaddin VsQtAddIn.Connect /Command File.Exit



with your appropriate directory.

In this version (compared to [...]


Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2007/07/07/howto-integrate-qt-with-visual-studio/' rel='bookmark' title='Permanent Link: Howto integrate Qt with Visual Studio'>Howto integrate Qt with Visual Studio</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/' rel='bookmark' title='Permanent Link: Compilation of Phonon under Windows XP'>Compilation of Phonon under Windows XP</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/' rel='bookmark' title='Permanent Link: Windows SDK 7 messed up'>Windows SDK 7 messed up</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Volker Wiendl has released a new Version of his <a href="http://mm-werkstatt.informatik.uni-augsburg.de/team_details.php?id=23" class="liexternal">VsQtAddin Visual Studio Plugin</a>:</p>
<ul>
	<li><a href="http://mm-werkstatt.informatik.uni-augsburg.de/downloads/VsQtAddIn_2005.msi" class="liexternal">Download (Version for VS 2005)</a></li>
</ul>

<p>In case you have a previous installed version uninstall it first, and make sure no component is remaining on the system. You may also run


<div class="wp_syntax"><div class="code"><pre class="dos" style="font-family:monospace;">&quot;C:\Programme\Microsoft Visual Studio <span style="color: #cc66cc;">8</span>\Common7\IDE\devenv.exe&quot; /resetaddin VsQtAddIn.Connect /Command File.<span style="color: #00b100; font-weight: bold;">Exit</span></pre></div></div>



with your appropriate directory.</p>

<p>In this version (compared to the one from 2007) the settings (moc, ui directory and such) are selected within Visual Studio and not in external files anymore.</p>

<p>Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2007/07/07/howto-integrate-qt-with-visual-studio/' rel='bookmark' title='Permanent Link: Howto integrate Qt with Visual Studio'>Howto integrate Qt with Visual Studio</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/' rel='bookmark' title='Permanent Link: Compilation of Phonon under Windows XP'>Compilation of Phonon under Windows XP</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/' rel='bookmark' title='Permanent Link: Windows SDK 7 messed up'>Windows SDK 7 messed up</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compilation of Phonon under Windows XP</title>
		<link>http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/</link>
		<comments>http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 11:41:46 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Phonon]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/</guid>
		<description><![CDATA[The original documentation of Trolltech was not sufficient to get me compile the phonon.dll and phonon_ds94.dll under Windows XP. Therefore you find here a description of what I did to get it compile.

I use Visual Studio 2005 and the corresponding nmake compiler. The description here thus relates to this compiler. If it works the same [...]


Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/' rel='bookmark' title='Permanent Link: Windows SDK 7 messed up'>Windows SDK 7 messed up</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/' rel='bookmark' title='Permanent Link: free Qt Visual Studio Integration'>free Qt Visual Studio Integration</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2007/03/06/mfc-books-to-read/' rel='bookmark' title='Permanent Link: Books to read'>Books to read</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://doc.trolltech.com/4.4/phonon-overview.html#installing-phonon" class="liexternal">original documentation of Trolltech</a> was not sufficient to get me compile the phonon.dll and phonon_ds94.dll under Windows XP. Therefore you find here a description of what I did to get it compile.</p>

<p>I use Visual Studio 2005 and the corresponding nmake compiler. The description here thus relates to this compiler. If it works the same with the 2008 Version I do not know. I did not test mingw, but since the Qt docs itself say that the phonon library is not compatible with mingw that does not make much sense. I do not use Windows 2000 nor Vista. So I do not know what is necessary in such cases.</p>

<a id="toc"></a><ol class="toc"><li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/#toc-installation-of-sdks" class="liinternal">Installation of SDKs</a></li><li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/#toc-patch-sdks" class="liinternal">Patch SDKs</a></li><li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/#toc-change-system-variables" class="liinternal">Change System Variables</a></li><li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/#toc-phonon-bat" class="liinternal">phonon.bat</a></li><li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/#toc-visual-c-command-shell" class="liinternal">Visual C++ command shell</a></li><li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/#toc-configure" class="liinternal">Configure</a></li><li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/#toc-compilation" class="liinternal">Compilation</a></li></ol>

<h3 id="toc-installation-of-sdks">Installation of SDKs</h3>
<p>First of all one needs additional SDKs for the compilation, which are not bundled with Visual Studio. These are</p>
<ul>
	<li><strong>Microsoft DirectX SDK </strong>. I used the Version from April 2008, but newer ones should work also. (<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=519aae99-b701-4ca1-8495-39ddde9d7030&#038;DisplayLang=en" class="liexternal">Link to Version June 2008</a>)</li>
	<li><strong>Windows SDK</strong>. I use the Version <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc&#038;displaylang=en" class="liexternal">Windows SDK for Windows Server 2008 and .NET Framework 3.5</a>. This is also available as an <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&#038;displaylang=en" class="liexternal">ISO Image</a></li>
</ul>

<h3 id="toc-patch-sdks">Patch SDKs</h3>
<p>Wired but true, the Windows SDK does not compile. It is somehow broken. You need to do the following: </p>
<p>Add the following line </p>


<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &quot;rpcsal.h&quot;</span></pre></div></div>



<p>to linenumber 32 in files</p>
<ul>
	<li>C:\Programme\Microsoft SDKs\Windows\v6.1\Include\medparam.h</li>
	<li>C:\Programme\Microsoft SDKs\Windows\v6.1\Include\mediaobj.h </li>
</ul>

<h3 id="toc-change-system-variables">Change System Variables</h3>
<p>These variables need to be set, otherwise Visual C++ does not find the header and library files.</p>
<ul>
	<li>Add &#8220;<code>C:\Programme\Microsoft SDKs\Windows\v6.1\Include</code>&#8221; to variable &#8220;<code>INCLUDE</code>&#8220;.</li>
	<li>Add &#8220;<code>C:\Programme\Microsoft SDKs\Windows\v6.1\Lib</code>&#8221; to variable &#8220;<code>LIB</code>&#8220;</li>
</ul>

<h3 id="toc-phonon-bat">phonon.bat</h3>
<p>Some Variables need to be set before compilation. The easiest way is to create a <code>phonon.bat</code> file that can be executed before one starts configure.</p>


<div class="wp_syntax"><div class="code"><pre class="bat" style="font-family:monospace;">&quot;%PROGRAMFILES%\Microsoft DirectX SDK (April 2007)\utilities\bin\dx_setenv.cmd&quot;
%PROGRAMFILES%\Microsoft SDKs\Windows\v6.1\Bin\SetEnv.Cmd</pre></div></div>



<p>The last one should only be necessary if you use the Express Version, but it is no problem if is called anyway</p>

<h3 id="toc-visual-c-command-shell">Visual C++ command shell</h3>
Start the &#8220;Visual C++ command shell&#8221;. If variables should not be in right order for some reason you can achieve the same by doing
<ul>
	<li>Start <code>cmd.exe</code></li>
	<li>Run <code>phonon.bat</code></li>
	<li>run <code>%PROGRAMFILES%\Microsoft Visual Studio 8\VC\vcvarsall.bat x86 </code></li>
</ul>


<h3 id="toc-configure">Configure</h3>
<p>Run <code>phonon.bat</code> if not done already, as described above. Then call configure
<pre><code>configure -platform win32-msvc2005 -phonon</code></pre>
in the Qt directory.</p>

<h3 id="toc-compilation">Compilation</h3>
<p>Change to the directories</p>
<ul>
	<li>src/phonon</li>
	<li>src/plugins/phonon</li>
</ul>
<p>and call <code>nmake </code> in both.</p>

<p>You should end up with phonon.dll and phonon_ds94.dll (in directory &#8220;plugins\phonon_backend&#8221;).</p>













<p>Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/' rel='bookmark' title='Permanent Link: Windows SDK 7 messed up'>Windows SDK 7 messed up</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/' rel='bookmark' title='Permanent Link: free Qt Visual Studio Integration'>free Qt Visual Studio Integration</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2007/03/06/mfc-books-to-read/' rel='bookmark' title='Permanent Link: Books to read'>Books to read</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>qwt spectrogramm plot with data arrays</title>
		<link>http://www.matthiaspospiech.de/blog/2008/06/16/qwt-spectrogramm-plot-with-data-arrays/</link>
		<comments>http://www.matthiaspospiech.de/blog/2008/06/16/qwt-spectrogramm-plot-with-data-arrays/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 15:59:06 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Qwt]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/blog/2008/06/16/qwt-spectrogramm-plot-with-data-arrays/</guid>
		<description><![CDATA[The following is a class using the qwt libary to generate a spectrogramm and/or a contour plot. In contrast to the example shipped with qwt it uses a data array instead of a hard coded function.

QSpectrogramPlot.h


#ifndef QSPECTROGRAMPLOT_H_
#define QSPECTROGRAMPLOT_H_
&#160;
#include &#34;ExtFunctions.h&#34;
&#160;
#include &#60;QtGui/QHBoxLayout&#62;
#include &#60;QtGui/QWidget&#62;
&#160;
#include &#60;qwt_plot.h&#62;
#include &#60;qwt_color_map.h&#62;
#include &#60;qwt_plot_spectrogram.h&#62;
#include &#60;qwt_scale_widget.h&#62;
#include &#60;qwt_scale_draw.h&#62;
#include &#60;qwt_plot_zoomer.h&#62;
#include &#60;qwt_plot_panner.h&#62;
#include &#60;qwt_plot_layout.h&#62;
&#160;
&#160;
/* -------------------------------------------
 * SpectrogramData derived from QwtRasterData
 [...]


Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2007/04/26/mfc-flicker-free-example-with-dialog/' rel='bookmark' title='Permanent Link: Flicker Free example with dialog'>Flicker Free example with dialog</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2009/01/03/qt-spinbox-widget-with-scientific-notation/' rel='bookmark' title='Permanent Link: Qt SpinBox Widget with Scientific Notation'>Qt SpinBox Widget with Scientific Notation</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2007/04/27/mfc-flicker-free-example-with-cstatic-control/' rel='bookmark' title='Permanent Link: Flicker Free example with CStatic Control'>Flicker Free example with CStatic Control</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[The following is a class using the qwt libary to generate a spectrogramm and/or a contour plot. In contrast to the example shipped with qwt it uses a data array instead of a hard coded function.
<span id="more-180"></span>
QSpectrogramPlot.h


<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#ifndef QSPECTROGRAMPLOT_H_</span>
<span style="color: #339933;">#define QSPECTROGRAMPLOT_H_</span>
&nbsp;
<span style="color: #339933;">#include &quot;ExtFunctions.h&quot;</span>
&nbsp;
<span style="color: #339933;">#include &lt;QtGui/QHBoxLayout&gt;</span>
<span style="color: #339933;">#include &lt;QtGui/QWidget&gt;</span>
&nbsp;
<span style="color: #339933;">#include &lt;qwt_plot.h&gt;</span>
<span style="color: #339933;">#include &lt;qwt_color_map.h&gt;</span>
<span style="color: #339933;">#include &lt;qwt_plot_spectrogram.h&gt;</span>
<span style="color: #339933;">#include &lt;qwt_scale_widget.h&gt;</span>
<span style="color: #339933;">#include &lt;qwt_scale_draw.h&gt;</span>
<span style="color: #339933;">#include &lt;qwt_plot_zoomer.h&gt;</span>
<span style="color: #339933;">#include &lt;qwt_plot_panner.h&gt;</span>
<span style="color: #339933;">#include &lt;qwt_plot_layout.h&gt;</span>
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">/* -------------------------------------------
 * SpectrogramData derived from QwtRasterData
 * Saves the values for the plot
 * -------------------------------------------
*/</span>
&nbsp;
class SpectrogramData<span style="color: #339933;">:</span> public QwtRasterData
<span style="color: #009900;">&#123;</span>
private<span style="color: #339933;">:</span>
	<span style="color: #993333;">double</span> <span style="color: #339933;">*</span> m_Array<span style="color: #339933;">;</span>
	<span style="color: #993333;">double</span> m_minValue<span style="color: #339933;">;</span>
	<span style="color: #993333;">double</span> m_maxValue<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #993333;">struct</span> structMinMax<span style="color: #009900;">&#123;</span>
		<span style="color: #993333;">double</span> min<span style="color: #339933;">;</span>
		<span style="color: #993333;">double</span> max<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	structMinMax m_RangeX<span style="color: #339933;">;</span>
	structMinMax m_RangeY<span style="color: #339933;">;</span>
	<span style="color: #993333;">struct</span> structXY<span style="color: #009900;">&#123;</span>
		<span style="color: #993333;">double</span> x<span style="color: #339933;">;</span>
		<span style="color: #993333;">double</span> y<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	structXY m_DataSize<span style="color: #339933;">;</span>
	structXY m_RealToArray<span style="color: #339933;">;</span>
&nbsp;
public<span style="color: #339933;">:</span>
	<span style="color: #666666; font-style: italic;">// Constructor giving back the QwtRasterData Constructor</span>
    SpectrogramData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> QwtRasterData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
		m_Array <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    ~SpectrogramData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>m_Array <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span>
			delete <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> m_Array<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    virtual QwtRasterData <span style="color: #339933;">*</span>copy<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #993333;">const</span>
    <span style="color: #009900;">&#123;</span>
        SpectrogramData <span style="color: #339933;">*</span>clone <span style="color: #339933;">=</span> new SpectrogramData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		clone<span style="color: #339933;">-&gt;</span>setRangeX<span style="color: #009900;">&#40;</span>m_RangeX.<span style="color: #202020;">min</span><span style="color: #339933;">,</span> m_RangeX.<span style="color: #202020;">max</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		clone<span style="color: #339933;">-&gt;</span>setRangeY<span style="color: #009900;">&#40;</span>m_RangeY.<span style="color: #202020;">min</span><span style="color: #339933;">,</span> m_RangeY.<span style="color: #202020;">max</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		clone<span style="color: #339933;">-&gt;</span>setBoundingRect<span style="color: #009900;">&#40;</span>QwtDoubleRect<span style="color: #009900;">&#40;</span>m_RangeX.<span style="color: #202020;">min</span><span style="color: #339933;">,</span> m_RangeY.<span style="color: #202020;">min</span><span style="color: #339933;">,</span> m_RangeX.<span style="color: #202020;">max</span><span style="color: #339933;">,</span> m_RangeY.<span style="color: #202020;">max</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		clone<span style="color: #339933;">-&gt;</span>setData<span style="color: #009900;">&#40;</span>m_Array<span style="color: #339933;">,</span> m_DataSize.<span style="color: #202020;">x</span><span style="color: #339933;">,</span> m_DataSize.<span style="color: #202020;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> clone<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    virtual QwtDoubleInterval range<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #993333;">const</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> QwtDoubleInterval<span style="color: #009900;">&#40;</span>m_minValue<span style="color: #339933;">,</span> m_maxValue<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #993333;">double</span> value<span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span> x<span style="color: #339933;">,</span> <span style="color: #993333;">double</span> y<span style="color: #009900;">&#41;</span> <span style="color: #993333;">const</span>
    <span style="color: #009900;">&#123;</span>
		<span style="color: #993333;">int</span> xpos <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>x <span style="color: #339933;">-</span> m_RangeX.<span style="color: #202020;">min</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> m_RealToArray.<span style="color: #202020;">x</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #993333;">int</span> ypos <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>y <span style="color: #339933;">-</span> m_RangeY.<span style="color: #202020;">min</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> m_RealToArray.<span style="color: #202020;">y</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #993333;">int</span> pos <span style="color: #339933;">=</span> ArrPos<span style="color: #009900;">&#40;</span>xpos<span style="color: #339933;">,</span> ypos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #993333;">double</span> dvalue <span style="color: #339933;">=</span> m_Array<span style="color: #009900;">&#91;</span>pos<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> dvalue<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #993333;">void</span> setData<span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span> <span style="color: #339933;">*</span> Array<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> sizex<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> sizey<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		m_DataSize.<span style="color: #202020;">x</span> <span style="color: #339933;">=</span> sizex<span style="color: #339933;">;</span>
		m_DataSize.<span style="color: #202020;">y</span> <span style="color: #339933;">=</span> sizey<span style="color: #339933;">;</span>
		<span style="color: #993333;">int</span> size <span style="color: #339933;">=</span> sizex <span style="color: #339933;">*</span> sizey<span style="color: #339933;">;</span>
		MinMaxArrayValue<span style="color: #009900;">&#40;</span>Array<span style="color: #339933;">,</span> size<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>m_minValue<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>m_maxValue<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>m_Array <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span>
			delete <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> m_Array<span style="color: #339933;">;</span>
		m_Array <span style="color: #339933;">=</span> new <span style="color: #993333;">double</span> <span style="color: #009900;">&#91;</span>size<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		memcpy<span style="color: #009900;">&#40;</span>m_Array<span style="color: #339933;">,</span> Array<span style="color: #339933;">,</span> size <span style="color: #339933;">*</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		m_RealToArray.<span style="color: #202020;">x</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>m_RangeX.<span style="color: #202020;">max</span> <span style="color: #339933;">-</span> m_RangeX.<span style="color: #202020;">min</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span>m_DataSize.<span style="color: #202020;">x</span> <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		m_RealToArray.<span style="color: #202020;">y</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>m_RangeY.<span style="color: #202020;">max</span> <span style="color: #339933;">-</span> m_RangeY.<span style="color: #202020;">min</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span>m_DataSize.<span style="color: #202020;">y</span> <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #993333;">void</span> setRangeX<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">double</span> min<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">double</span> max<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		m_RangeX.<span style="color: #202020;">min</span> <span style="color: #339933;">=</span> min<span style="color: #339933;">;</span>
		m_RangeX.<span style="color: #202020;">max</span> <span style="color: #339933;">=</span> max<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #993333;">void</span> setRangeY<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">double</span> min<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">double</span> max<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		m_RangeY.<span style="color: #202020;">min</span> <span style="color: #339933;">=</span> min<span style="color: #339933;">;</span>
		m_RangeY.<span style="color: #202020;">max</span> <span style="color: #339933;">=</span> max<span style="color: #339933;">;</span>		
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #993333;">int</span> ArrPos<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">int</span> x<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">int</span> y<span style="color: #009900;">&#41;</span> <span style="color: #993333;">const</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> y <span style="color: #339933;">+</span> m_DataSize.<span style="color: #202020;">y</span> <span style="color: #339933;">*</span> x<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
class QSpectrogramPlot <span style="color: #339933;">:</span> public QWidget <span style="color: #666666; font-style: italic;">//, protected Ui_QSpectrogramPlot</span>
<span style="color: #009900;">&#123;</span>
	Q_OBJECT
public<span style="color: #339933;">:</span>
	QSpectrogramPlot<span style="color: #009900;">&#40;</span>QWidget<span style="color: #339933;">*</span> parent <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> Qt<span style="color: #339933;">::</span><span style="color: #202020;">WFlags</span> flags <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	virtual ~QSpectrogramPlot<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
public<span style="color: #339933;">:</span>
    QHBoxLayout <span style="color: #339933;">*</span>hboxLayout<span style="color: #339933;">;</span>
    QwtPlot <span style="color: #339933;">*</span>qwtPlot<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #993333;">void</span> setupUi<span style="color: #009900;">&#40;</span>QWidget <span style="color: #339933;">*</span>widget<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
		QSizePolicy sizePolicy<span style="color: #009900;">&#40;</span>QSizePolicy<span style="color: #339933;">::</span><span style="color: #202020;">Expanding</span><span style="color: #339933;">,</span> QSizePolicy<span style="color: #339933;">::</span><span style="color: #202020;">Expanding</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		sizePolicy.<span style="color: #202020;">setHorizontalStretch</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		sizePolicy.<span style="color: #202020;">setVerticalStretch</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		sizePolicy.<span style="color: #202020;">setHeightForWidth</span><span style="color: #009900;">&#40;</span>widget<span style="color: #339933;">-&gt;</span>sizePolicy<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">hasHeightForWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		widget<span style="color: #339933;">-&gt;</span>setSizePolicy<span style="color: #009900;">&#40;</span>sizePolicy<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		widget<span style="color: #339933;">-&gt;</span>setAutoFillBackground<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		hboxLayout <span style="color: #339933;">=</span> new QHBoxLayout<span style="color: #009900;">&#40;</span>widget<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		qwtPlot <span style="color: #339933;">=</span> new QwtPlot<span style="color: #009900;">&#40;</span>widget<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		qwtPlot<span style="color: #339933;">-&gt;</span>setSizePolicy<span style="color: #009900;">&#40;</span>sizePolicy<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		hboxLayout<span style="color: #339933;">-&gt;</span>addWidget<span style="color: #009900;">&#40;</span>qwtPlot<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		QMetaObject<span style="color: #339933;">::</span><span style="color: #202020;">connectSlotsByName</span><span style="color: #009900;">&#40;</span>widget<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// setupUi</span>
&nbsp;
&nbsp;
private<span style="color: #339933;">:</span>
	QwtLinearColorMap m_colorMap<span style="color: #339933;">;</span>
	QwtPlotSpectrogram <span style="color: #339933;">*</span> m_spectrogram<span style="color: #339933;">;</span>
	QwtScaleWidget <span style="color: #339933;">*</span> m_rightAxis<span style="color: #339933;">;</span>
	SpectrogramData m_RasterData<span style="color: #339933;">;</span>
	QwtDoubleInterval m_DataRange<span style="color: #339933;">;</span>
	QwtPlotZoomer <span style="color: #339933;">*</span> zoomer<span style="color: #339933;">;</span>
&nbsp;
public slots<span style="color: #339933;">:</span>
    <span style="color: #993333;">void</span> showContour<span style="color: #009900;">&#40;</span>bool on<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">void</span> showSpectrogram<span style="color: #009900;">&#40;</span>bool on<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
private<span style="color: #339933;">:</span>
	<span style="color: #993333;">void</span> initColorMap<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">void</span> initColorBar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">void</span> initZoomer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
public<span style="color: #339933;">:</span>
	<span style="color: #000000; font-weight: bold;">enum</span> colormap<span style="color: #009900;">&#123;</span>standard<span style="color: #339933;">,</span> gray<span style="color: #339933;">,</span> jet<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #993333;">void</span> setData<span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span> <span style="color: #339933;">*</span> Array<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> sizex<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> sizey<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">void</span> setRangeX<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">double</span> min<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">double</span> max<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">void</span> setRangeY<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">double</span> min<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">double</span> max<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">void</span> setDataRange<span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span> min<span style="color: #339933;">,</span> <span style="color: #993333;">double</span> max<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">void</span> setDataAutoRange<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">void</span> setColorMap<span style="color: #009900;">&#40;</span>colormap map<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
private<span style="color: #339933;">:</span>
	colormap m_colormap<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">#endif</span></pre></div></div>




QSpectrogramPlot.cpp


<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;QSpectrogramPlot.h&quot;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* --------------------------------------
 * Zoomer Class, used in QSpectrogramPlot
 * --------------------------------------
*/</span>
class MyZoomer<span style="color: #339933;">:</span> public QwtPlotZoomer
<span style="color: #009900;">&#123;</span>
public<span style="color: #339933;">:</span>
    MyZoomer<span style="color: #009900;">&#40;</span>QwtPlotCanvas<span style="color: #339933;">*</span> canvas<span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> QwtPlotZoomer<span style="color: #009900;">&#40;</span>canvas<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        setTrackerMode<span style="color: #009900;">&#40;</span>QwtPicker<span style="color: #339933;">::</span><span style="color: #202020;">AlwaysOn</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
protected<span style="color: #339933;">:</span>
    virtual QwtText trackerText<span style="color: #009900;">&#40;</span> <span style="color: #993333;">const</span> QwtDoublePoint<span style="color: #339933;">&amp;</span> p <span style="color: #009900;">&#41;</span> <span style="color: #993333;">const</span> 
    <span style="color: #009900;">&#123;</span>
        QwtText t<span style="color: #009900;">&#40;</span> QwtPlotPicker<span style="color: #339933;">::</span><span style="color: #202020;">trackerText</span><span style="color: #009900;">&#40;</span> p <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        QColor c<span style="color: #009900;">&#40;</span>Qt<span style="color: #339933;">::</span><span style="color: #202020;">white</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        c.<span style="color: #202020;">setAlpha</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">180</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        t.<span style="color: #202020;">setBackgroundBrush</span><span style="color: #009900;">&#40;</span> QBrush<span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> t<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">/* --------------------------------------
 * QSpectrogramPlot Class
 * --------------------------------------
*/</span>
&nbsp;
QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">QSpectrogramPlot</span><span style="color: #009900;">&#40;</span>QWidget<span style="color: #339933;">*</span> parent <span style="color: #808080; font-style: italic;">/*= 0*/</span><span style="color: #339933;">,</span> Qt<span style="color: #339933;">::</span><span style="color: #202020;">WFlags</span> flags <span style="color: #808080; font-style: italic;">/*= 0*/</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> QWidget<span style="color: #009900;">&#40;</span>parent<span style="color: #339933;">,</span> flags<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	setupUi<span style="color: #009900;">&#40;</span>this<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	m_spectrogram <span style="color: #339933;">=</span> new QwtPlotSpectrogram<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	m_RasterData <span style="color: #339933;">=</span> SpectrogramData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	setColorMap<span style="color: #009900;">&#40;</span>gray<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//initColorMap();	</span>
	m_spectrogram<span style="color: #339933;">-&gt;</span>attach<span style="color: #009900;">&#40;</span>qwtPlot<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	qwtPlot<span style="color: #339933;">-&gt;</span>plotLayout<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>setAlignCanvasToScales<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			
	initColorBar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	zoomer <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
QSpectrogramPlot<span style="color: #339933;">::</span>~QSpectrogramPlot<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">setData</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span> <span style="color: #339933;">*</span> Array<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> sizex<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> sizey<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	m_RasterData.<span style="color: #202020;">setData</span><span style="color: #009900;">&#40;</span>Array<span style="color: #339933;">,</span> sizex<span style="color: #339933;">,</span> sizey<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	m_spectrogram<span style="color: #339933;">-&gt;</span>setData<span style="color: #009900;">&#40;</span>m_RasterData<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	setDataAutoRange<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	initColorBar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	initZoomer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">setRangeX</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">double</span> min<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">double</span> max<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	m_RasterData.<span style="color: #202020;">setRangeX</span><span style="color: #009900;">&#40;</span>min<span style="color: #339933;">,</span> max<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	qwtPlot<span style="color: #339933;">-&gt;</span>setAxisScale<span style="color: #009900;">&#40;</span>QwtPlot<span style="color: #339933;">::</span><span style="color: #202020;">xBottom</span><span style="color: #339933;">,</span> min<span style="color: #339933;">,</span> max<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">setRangeY</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">double</span> min<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">double</span> max<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	m_RasterData.<span style="color: #202020;">setRangeY</span><span style="color: #009900;">&#40;</span>min<span style="color: #339933;">,</span> max<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	qwtPlot<span style="color: #339933;">-&gt;</span>setAxisScale<span style="color: #009900;">&#40;</span>QwtPlot<span style="color: #339933;">::</span><span style="color: #202020;">yLeft</span><span style="color: #339933;">,</span> min<span style="color: #339933;">,</span> max<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #993333;">void</span> QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">showContour</span><span style="color: #009900;">&#40;</span>bool on<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    m_spectrogram<span style="color: #339933;">-&gt;</span>setDisplayMode<span style="color: #009900;">&#40;</span>QwtPlotSpectrogram<span style="color: #339933;">::</span><span style="color: #202020;">ContourMode</span><span style="color: #339933;">,</span> on<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">showSpectrogram</span><span style="color: #009900;">&#40;</span>bool on<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    m_spectrogram<span style="color: #339933;">-&gt;</span>setDisplayMode<span style="color: #009900;">&#40;</span>QwtPlotSpectrogram<span style="color: #339933;">::</span><span style="color: #202020;">ImageMode</span><span style="color: #339933;">,</span> on<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    m_spectrogram<span style="color: #339933;">-&gt;</span>setDefaultContourPen<span style="color: #009900;">&#40;</span>on <span style="color: #339933;">?</span> QPen<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> QPen<span style="color: #009900;">&#40;</span>Qt<span style="color: #339933;">::</span><span style="color: #202020;">NoPen</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">setColorMap</span><span style="color: #009900;">&#40;</span>colormap map<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	m_colormap <span style="color: #339933;">=</span> map<span style="color: #339933;">;</span>
	initColorMap<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	initColorBar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">initColorMap</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>m_colormap<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">case</span> standard<span style="color: #339933;">:</span>
			m_colorMap <span style="color: #339933;">=</span> QwtLinearColorMap<span style="color: #009900;">&#40;</span>Qt<span style="color: #339933;">::</span><span style="color: #202020;">darkCyan</span><span style="color: #339933;">,</span> Qt<span style="color: #339933;">::</span><span style="color: #202020;">red</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span><span style="color:#800080;">0.1</span><span style="color: #339933;">,</span> Qt<span style="color: #339933;">::</span><span style="color: #202020;">cyan</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span><span style="color:#800080;">0.6</span><span style="color: #339933;">,</span> Qt<span style="color: #339933;">::</span><span style="color: #202020;">green</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span><span style="color:#800080;">0.95</span><span style="color: #339933;">,</span> Qt<span style="color: #339933;">::</span><span style="color: #202020;">yellow</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">case</span> gray<span style="color: #339933;">:</span>
		    m_colorMap <span style="color: #339933;">=</span> QwtLinearColorMap<span style="color: #009900;">&#40;</span>Qt<span style="color: #339933;">::</span><span style="color: #202020;">black</span><span style="color: #339933;">,</span> Qt<span style="color: #339933;">::</span><span style="color: #202020;">white</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">case</span> jet<span style="color: #339933;">:</span>
			<span style="color: #993333;">double</span> pos<span style="color: #339933;">;</span>
			m_colorMap <span style="color: #339933;">=</span> QwtLinearColorMap<span style="color: #009900;">&#40;</span>QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">189</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">132</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">1.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">255</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">2.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">66</span><span style="color: #339933;">,</span><span style="color: #0000dd;">255</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">3.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">132</span><span style="color: #339933;">,</span><span style="color: #0000dd;">255</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">4.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">189</span><span style="color: #339933;">,</span><span style="color: #0000dd;">255</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">5.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">255</span><span style="color: #339933;">,</span><span style="color: #0000dd;">255</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">6.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">66</span><span style="color: #339933;">,</span><span style="color: #0000dd;">255</span><span style="color: #339933;">,</span><span style="color: #0000dd;">189</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">7.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">132</span><span style="color: #339933;">,</span><span style="color: #0000dd;">255</span><span style="color: #339933;">,</span><span style="color: #0000dd;">132</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">8.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">189</span><span style="color: #339933;">,</span><span style="color: #0000dd;">255</span><span style="color: #339933;">,</span><span style="color: #0000dd;">66</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">9.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">255</span><span style="color: #339933;">,</span><span style="color: #0000dd;">255</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">10.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">255</span><span style="color: #339933;">,</span><span style="color: #0000dd;">189</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">12.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">255</span><span style="color: #339933;">,</span><span style="color: #0000dd;">66</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			pos <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">/</span><span style="color:#800080;">13.0</span><span style="color: #339933;">*</span><span style="color:#800080;">13.0</span><span style="color: #339933;">;</span> m_colorMap.<span style="color: #202020;">addColorStop</span><span style="color: #009900;">&#40;</span>pos<span style="color: #339933;">,</span> QColor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">189</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>	
	<span style="color: #009900;">&#125;</span>
	m_spectrogram<span style="color: #339933;">-&gt;</span>setColorMap<span style="color: #009900;">&#40;</span>m_colorMap<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">setDataRange</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span> min<span style="color: #339933;">,</span> <span style="color: #993333;">double</span> max<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	m_DataRange <span style="color: #339933;">=</span> QwtDoubleInterval<span style="color: #009900;">&#40;</span>min<span style="color: #339933;">,</span> max<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">setDataAutoRange</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	m_DataRange <span style="color: #339933;">=</span> m_spectrogram<span style="color: #339933;">-&gt;</span>data<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">range</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>m_DataRange.<span style="color: #202020;">minValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> m_DataRange.<span style="color: #202020;">maxValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		m_DataRange <span style="color: #339933;">=</span> QwtDoubleInterval<span style="color: #009900;">&#40;</span>m_DataRange.<span style="color: #202020;">minValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> m_DataRange.<span style="color: #202020;">minValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">initColorBar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    m_rightAxis <span style="color: #339933;">=</span> qwtPlot<span style="color: #339933;">-&gt;</span>axisWidget<span style="color: #009900;">&#40;</span>QwtPlot<span style="color: #339933;">::</span><span style="color: #202020;">yRight</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    m_rightAxis<span style="color: #339933;">-&gt;</span>setColorBarEnabled<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    m_rightAxis<span style="color: #339933;">-&gt;</span>setColorMap<span style="color: #009900;">&#40;</span>m_DataRange<span style="color: #339933;">,</span> m_spectrogram<span style="color: #339933;">-&gt;</span>colorMap<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    qwtPlot<span style="color: #339933;">-&gt;</span>setAxisScale<span style="color: #009900;">&#40;</span>QwtPlot<span style="color: #339933;">::</span><span style="color: #202020;">yRight</span><span style="color: #339933;">,</span> 
        m_DataRange.<span style="color: #202020;">minValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        m_DataRange.<span style="color: #202020;">maxValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    qwtPlot<span style="color: #339933;">-&gt;</span>enableAxis<span style="color: #009900;">&#40;</span>QwtPlot<span style="color: #339933;">::</span><span style="color: #202020;">yRight</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> QSpectrogramPlot<span style="color: #339933;">::</span><span style="color: #202020;">initZoomer</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// LeftButton for the zooming</span>
    <span style="color: #666666; font-style: italic;">// MidButton for the panning</span>
    <span style="color: #666666; font-style: italic;">// RightButton: zoom out by 1</span>
    <span style="color: #666666; font-style: italic;">// Ctrl+RighButton: zoom out to full size</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>zoomer <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span>
		delete zoomer<span style="color: #339933;">;</span>
	zoomer <span style="color: #339933;">=</span> new MyZoomer<span style="color: #009900;">&#40;</span>qwtPlot<span style="color: #339933;">-&gt;</span>canvas<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    zoomer<span style="color: #339933;">-&gt;</span>setMousePattern<span style="color: #009900;">&#40;</span>QwtEventPattern<span style="color: #339933;">::</span><span style="color: #202020;">MouseSelect2</span><span style="color: #339933;">,</span>
        Qt<span style="color: #339933;">::</span><span style="color: #202020;">RightButton</span><span style="color: #339933;">,</span> Qt<span style="color: #339933;">::</span><span style="color: #202020;">ControlModifier</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    zoomer<span style="color: #339933;">-&gt;</span>setMousePattern<span style="color: #009900;">&#40;</span>QwtEventPattern<span style="color: #339933;">::</span><span style="color: #202020;">MouseSelect3</span><span style="color: #339933;">,</span>
        Qt<span style="color: #339933;">::</span><span style="color: #202020;">RightButton</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    QwtPlotPanner <span style="color: #339933;">*</span>panner <span style="color: #339933;">=</span> new QwtPlotPanner<span style="color: #009900;">&#40;</span>qwtPlot<span style="color: #339933;">-&gt;</span>canvas<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    panner<span style="color: #339933;">-&gt;</span>setAxisEnabled<span style="color: #009900;">&#40;</span>QwtPlot<span style="color: #339933;">::</span><span style="color: #202020;">yRight</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    panner<span style="color: #339933;">-&gt;</span>setMouseButton<span style="color: #009900;">&#40;</span>Qt<span style="color: #339933;">::</span><span style="color: #202020;">MidButton</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Avoid jumping when labels with more/less digits</span>
    <span style="color: #666666; font-style: italic;">// appear/disappear when scrolling vertically</span>
&nbsp;
    <span style="color: #993333;">const</span> QFontMetrics fm<span style="color: #009900;">&#40;</span>qwtPlot<span style="color: #339933;">-&gt;</span>axisWidget<span style="color: #009900;">&#40;</span>QwtPlot<span style="color: #339933;">::</span><span style="color: #202020;">yLeft</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>font<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    QwtScaleDraw <span style="color: #339933;">*</span>sd <span style="color: #339933;">=</span> qwtPlot<span style="color: #339933;">-&gt;</span>axisScaleDraw<span style="color: #009900;">&#40;</span>QwtPlot<span style="color: #339933;">::</span><span style="color: #202020;">yLeft</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    sd<span style="color: #339933;">-&gt;</span>setMinimumExtent<span style="color: #009900;">&#40;</span> fm.<span style="color: #202020;">width</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;100.00&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #993333;">const</span> QColor c<span style="color: #009900;">&#40;</span>Qt<span style="color: #339933;">::</span><span style="color: #202020;">darkBlue</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    zoomer<span style="color: #339933;">-&gt;</span>setRubberBandPen<span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    zoomer<span style="color: #339933;">-&gt;</span>setTrackerPen<span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>




<p>Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2007/04/26/mfc-flicker-free-example-with-dialog/' rel='bookmark' title='Permanent Link: Flicker Free example with dialog'>Flicker Free example with dialog</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2009/01/03/qt-spinbox-widget-with-scientific-notation/' rel='bookmark' title='Permanent Link: Qt SpinBox Widget with Scientific Notation'>Qt SpinBox Widget with Scientific Notation</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2007/04/27/mfc-flicker-free-example-with-cstatic-control/' rel='bookmark' title='Permanent Link: Flicker Free example with CStatic Control'>Flicker Free example with CStatic Control</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2008/06/16/qwt-spectrogramm-plot-with-data-arrays/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Mathematik mit C++</title>
		<link>http://www.matthiaspospiech.de/blog/2008/04/12/mathematik-mit-c/</link>
		<comments>http://www.matthiaspospiech.de/blog/2008/04/12/mathematik-mit-c/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 13:38:11 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/blog/2008/04/12/mathematik-mit-c/</guid>
		<description><![CDATA[N&#252;tzliche Links&#8230;

	Numerical Recipes Onlineversion des Buches unter http://www.nrbook.com/
	Math Tools
	Mathematische Funktionen in C++
	math.h, Standard C library for mathematic operations.


No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[N&#252;tzliche Links&#8230;
<ul>
	<li><a href="http://www.nr.com/" class="liexternal">Numerical Recipes</a> Onlineversion des Buches unter <a href="http://www.nrbook.com/a/bookcpdf.html" class="liexternal">http://www.nrbook.com/</a></li>
	<li><a href="http://www.mathtools.net/" class="liexternal">Math Tools</a></li>
	<li><a href="http://www.willemer.de/informatik/cpp/mathlib.htm" class="liexternal">Mathematische Funktionen in C++</a></li>
	<li><a href="http://www.cplusplus.com/ref/cmath/" class="liexternal">math.h, Standard C library for mathematic operations.</a></li>
</ul>

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2008/04/12/mathematik-mit-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Umfangreiche Links zu C++</title>
		<link>http://www.matthiaspospiech.de/blog/2008/04/12/umfangreiche-links-zu-c/</link>
		<comments>http://www.matthiaspospiech.de/blog/2008/04/12/umfangreiche-links-zu-c/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 13:36:46 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/blog/2008/04/12/umfangreiche-links-zu-c/</guid>
		<description><![CDATA[Linkliste C/C++

No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<a href="http://cplus.kompf.de/links.html" class="liexternal">Linkliste C/C++</a>

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2008/04/12/umfangreiche-links-zu-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++ STL Dokumentation</title>
		<link>http://www.matthiaspospiech.de/blog/2008/03/25/c-stl-dokumentation/</link>
		<comments>http://www.matthiaspospiech.de/blog/2008/03/25/c-stl-dokumentation/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 13:28:16 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[STL]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/blog/2008/03/25/c-stl-dokumentation/</guid>
		<description><![CDATA[Here a list of free available documentations that I could find:

	http://www.cplusplus.com/reference/clibrary/
	http://wwwasd.web.cern.ch/wwwasd/lhc++/RW/stdlibcr/com_8038.htm




Related posts:Streams in C++
Mathematik mit C++



Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2007/04/22/streams-in-c/' rel='bookmark' title='Permanent Link: Streams in C++'>Streams in C++</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2008/04/12/mathematik-mit-c/' rel='bookmark' title='Permanent Link: Mathematik mit C++'>Mathematik mit C++</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[Here a list of free available documentations that I could find:
<ul>
	<li><a href="http://www.cplusplus.com/reference/clibrary/" class="liexternal">http://www.cplusplus.com/reference/clibrary/</a></li>
	<li><a href="http://wwwasd.web.cern.ch/wwwasd/lhc++/RW/stdlibcr/com_8038.htm" class="liexternal">http://wwwasd.web.cern.ch/wwwasd/lhc++/RW/stdlibcr/com_8038.htm</a></li>
</ul>



<p>Related posts:<ol><li><a href='http://www.matthiaspospiech.de/blog/2007/04/22/streams-in-c/' rel='bookmark' title='Permanent Link: Streams in C++'>Streams in C++</a></li>
<li><a href='http://www.matthiaspospiech.de/blog/2008/04/12/mathematik-mit-c/' rel='bookmark' title='Permanent Link: Mathematik mit C++'>Mathematik mit C++</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2008/03/25/c-stl-dokumentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
