<?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>Sun, 08 Jan 2012 16:47:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>C++ Vortrag: Grundlagen und Objektorientierte Programmierung 2</title>
		<link>http://www.matthiaspospiech.de/blog/2010/09/07/c-vortrag-grundlagen-und-objektorientierte-programmierung-2/</link>
		<comments>http://www.matthiaspospiech.de/blog/2010/09/07/c-vortrag-grundlagen-und-objektorientierte-programmierung-2/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 18:40:15 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[ABCD]]></category>
		<category><![CDATA[Gaußpropagation]]></category>
		<category><![CDATA[Vortrag]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/?p=496</guid>
		<description><![CDATA[Erneut werde ich einen Workshop &#252;ber C++ halten. Diesmal habe ich die Grundlagen kurz gehalten und gehe daf&#252;r detailierter auf Klassen und Objektorientierte Programmierung ein. Das ganze umfasse 2 Stunden. Dabei werden ein paar praktische &#220;bungen durchgef&#252;hrt. Zielpublikum sind Masterstudenten und Doktoranden aus der Physik mit grundlegenden C/C++ Kentnissen &#8211; wobei Kentnissen in objektorientierter Programmierung [...]
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/08/25/c-vortrag-grundlagen-und-objektorientierte-programmierung/" rel="bookmark">C++ Vortrag: Grundlagen und Objektorientierte Programmierung</a><!-- (28.3)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2011/10/16/einfuhrung-in-bibliographien-mit-latex-biblatex-und-biber/" rel="bookmark">Einf&#252;hrung in Bibliographien mit LaTeX, biblatex und biber.</a><!-- (12.1)--></li>
	</ol>
</div>
]]></description>
			<content:encoded><![CDATA[<p>Erneut werde ich einen Workshop &#252;ber C++ halten. Diesmal habe ich die Grundlagen kurz gehalten und gehe daf&#252;r detailierter auf Klassen und Objektorientierte Programmierung ein.
Das ganze umfasse 2 Stunden. Dabei werden ein paar praktische &#220;bungen durchgef&#252;hrt. Zielpublikum sind Masterstudenten und Doktoranden aus der Physik mit grundlegenden C/C++ Kentnissen &#8211; wobei Kentnissen in objektorientierter Programmierung eher wenig vorhanden sind.</p>

Note: There is a file embedded within this post, please visit this post to download the file.
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/08/25/c-vortrag-grundlagen-und-objektorientierte-programmierung/" rel="bookmark">C++ Vortrag: Grundlagen und Objektorientierte Programmierung</a><!-- (28.3)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2011/10/16/einfuhrung-in-bibliographien-mit-latex-biblatex-und-biber/" rel="bookmark">Einf&#252;hrung in Bibliographien mit LaTeX, biblatex und biber.</a><!-- (12.1)--></li>
	</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2010/09/07/c-vortrag-grundlagen-und-objektorientierte-programmierung-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++ Vortrag: Grundlagen und Objektorientierte Programmierung</title>
		<link>http://www.matthiaspospiech.de/blog/2010/08/25/c-vortrag-grundlagen-und-objektorientierte-programmierung/</link>
		<comments>http://www.matthiaspospiech.de/blog/2010/08/25/c-vortrag-grundlagen-und-objektorientierte-programmierung/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 15:26:17 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Vortrag]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/?p=492</guid>
		<description><![CDATA[Den folgenden Vortrag mit Titel &#8220;Grundlagen und Objektorientierte Programmierung&#8221; habe ich im Februar 2009 w&#228;hrend eines mehrst&#252;ndigen Workshops gehalten. Zwischendurch wurden noch praktische &#220;bungen durchgef&#252;hrt. Related Posts C++ Vortrag: Grundlagen und Objektorientierte Programmierung 2 LaTeX Einf&#252;hrung Einf&#252;hrung in Bibliographien mit LaTeX, biblatex und biber.
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/09/07/c-vortrag-grundlagen-und-objektorientierte-programmierung-2/" rel="bookmark">C++ Vortrag: Grundlagen und Objektorientierte Programmierung 2</a><!-- (28.2)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2011/05/15/latex-einfuehrung/" rel="bookmark">LaTeX Einf&#252;hrung</a><!-- (7.1)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2011/10/16/einfuhrung-in-bibliographien-mit-latex-biblatex-und-biber/" rel="bookmark">Einf&#252;hrung in Bibliographien mit LaTeX, biblatex und biber.</a><!-- (6.7)--></li>
	</ol>
</div>
]]></description>
			<content:encoded><![CDATA[<p>Den folgenden Vortrag mit Titel &#8220;Grundlagen und Objektorientierte Programmierung&#8221; habe ich im Februar 2009 w&#228;hrend eines mehrst&#252;ndigen Workshops gehalten. Zwischendurch wurden noch praktische &#220;bungen durchgef&#252;hrt.</p>

Note: There is a file embedded within this post, please visit this post to download the file.
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/09/07/c-vortrag-grundlagen-und-objektorientierte-programmierung-2/" rel="bookmark">C++ Vortrag: Grundlagen und Objektorientierte Programmierung 2</a><!-- (28.2)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2011/05/15/latex-einfuehrung/" rel="bookmark">LaTeX Einf&#252;hrung</a><!-- (7.1)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2011/10/16/einfuhrung-in-bibliographien-mit-latex-biblatex-und-biber/" rel="bookmark">Einf&#252;hrung in Bibliographien mit LaTeX, biblatex und biber.</a><!-- (6.7)--></li>
	</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2010/08/25/c-vortrag-grundlagen-und-objektorientierte-programmierung/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Compilation of Qt 4.6.3 under Windows 7 with phonon</title>
		<link>http://www.matthiaspospiech.de/blog/2010/08/08/compilation-of-qt-4-6-3-under-windows-7-with-phonon/</link>
		<comments>http://www.matthiaspospiech.de/blog/2010/08/08/compilation-of-qt-4-6-3-under-windows-7-with-phonon/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 14:23:55 +0000</pubDate>
		<dc:creator>pospiech</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Phonon]]></category>
		<category><![CDATA[Windows SDK]]></category>

		<guid isPermaLink="false">http://www.matthiaspospiech.de/?p=488</guid>
		<description><![CDATA[Note: this is only usefull if you are using msvc 2005. For 2008 the dlls come with the installation, and with 2010 Qt 4.6.x does not compile anyway. In previous posts I have already described problems and solutions for the compilation of Qt with phonon. Here is my latest approach: First one needs to install [...]
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/" rel="bookmark">Compilation of Phonon under Windows XP</a><!-- (27.6)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/" rel="bookmark">Windows SDK 7 messed up</a><!-- (17.2)--></li>
	</ol>
</div>
]]></description>
			<content:encoded><![CDATA[<p>Note: this is only usefull if you are using msvc 2005. For 2008 the dlls come with the installation, and with 2010 Qt 4.6.x does not compile anyway.</p> 

<p>In previous posts I have already described problems and solutions for the compilation of Qt with phonon. Here is my latest approach:</p>

<p>First one needs to install the SDK. Though I am working with windows 7 the correct version is still v6.1 (Windows SDK for Windows Server 2008 and .NET Framework 3.5). The directx SDK is not required. </p>

<p>Next we need to patch the SDK code because it is buggy. This was aleady described in <a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/" class="liinternal">Compilation of Phonon under Windows XP</a>.</p>

For the compilation I am using this script to configure everything:


<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;">call &quot;<span style="color: #2C922C; font-style: italic;">%PROGRAMFILES%\Microsoft SDKs\Windows\v6.1\Bin\SetEnv.Cmd&quot; /x86 /RELEASE /xp </span>
call &quot;<span style="color: #2C922C; font-style: italic;">%PROGRAMFILES%\Microsoft Visual Studio 8\VC\vcvarsall.bat&quot; x86</span>
REM call &quot;C:<span style="color: #800000; font-weight: normal;">\Program</span> Files (x86)<span style="color: #800000; font-weight: normal;">\Microsoft</span> Visual Studio 8<span style="color: #800000; font-weight: normal;">\VC</span><span style="color: #800000; font-weight: normal;">\vcvarsall</span>.bat&quot; x86
&nbsp;
pause
&nbsp;
configure -platform win32-msvc2005 -qt-gif -qt-sql-odbc -qt-sql-sqlite -phonon -no-qt3support</pre></div></div>



<p>The Compiler is not found within &#8216;v6.1\Bin\SetEnv.Cmd&#8217; which is a bug in the script (described in <a href="http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/" class="liinternal">Windows SDK messed up</a>). Nevertheless with the configuration settings the script finishes and sets up the environment.</p>

<p>If you are using 64 bit, then you require the 3rd line instead of the second. I did not find a solution to handle 32 and 64 bit environments with the same script.</p>

<p>Compilation can then be done with <code>nmake</code> or if you do not want the examples and demos with <code>nmake sub-src</code></p><p>


<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/" rel="bookmark">Compilation of Phonon under Windows XP</a><!-- (27.6)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/" rel="bookmark">Windows SDK 7 messed up</a><!-- (17.2)--></li>
	</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2010/08/08/compilation-of-qt-4-6-3-under-windows-7-with-phonon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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 [...]
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/08/08/compilation-of-qt-4-6-3-under-windows-7-with-phonon/" rel="bookmark">Compilation of Qt 4.6.3 under Windows 7 with phonon</a><!-- (5.8)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/02/15/qt-with-mingw/" rel="bookmark">Qt with MinGW</a><!-- (5.4)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/" rel="bookmark">Compilation of Phonon under Windows XP</a><!-- (5.2)--></li>
	</ol>
</div>
]]></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;"><span style="color: #991111;">-unix:TARGET = $$join<span style="">&#40;</span>TARGET,,,d<span style="">&#41;</span></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;"><span style="color: #991111;">-CONFIG           += qt warn_on opengl thread zlib debug</span>
<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;"><span style="color: #991111;">-CONFIG      += qt warn_on thread debug</span>
<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;"><span style="color: #00b000;">+#include &lt;stdio.h&gt;</span></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;"><span style="color: #991111;">-#if defined<span style="">&#40;</span>QWT_TEMPLATEDLL<span style="">&#41;</span></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;"><span style="color: #00b000;">+CONFIG           += release     </span>
<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;"><span style="color: #00b000;">+#include &lt;stdio.h&gt;</span></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;"><span style="color: #991111;">-DESTDIR = ..</span>
<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;"><span style="color: #991111;">-CONFIG += debug console</span>
<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>

<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/08/08/compilation-of-qt-4-6-3-under-windows-7-with-phonon/" rel="bookmark">Compilation of Qt 4.6.3 under Windows 7 with phonon</a><!-- (5.8)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/02/15/qt-with-mingw/" rel="bookmark">Qt with MinGW</a><!-- (5.4)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/" rel="bookmark">Compilation of Phonon under Windows XP</a><!-- (5.2)--></li>
	</ol>
</div>
]]></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 [...]
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/08/08/compilation-of-qt-4-6-3-under-windows-7-with-phonon/" rel="bookmark">Compilation of Qt 4.6.3 under Windows 7 with phonon</a><!-- (18.3)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/" rel="bookmark">Compilation of Phonon under Windows XP</a><!-- (17.8)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/" rel="bookmark">free Qt Visual Studio Integration</a><!-- (10.8)--></li>
	</ol>
</div>
]]></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<span style="color: #33cc33;">&gt;</span>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 Files\doxygen\bin;C:\Program Files\C
ommon Files\Roxio Shared\9.0\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 8\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<span style="color: #33cc33;">&gt;</span>SetEnv.cmd
C:\Users\Matthias<span style="color: #33cc33;">&gt;</span>PATH
PATH=;C:\Program Files\Microsoft Visual Studio 9.0vcpackages;C:\Program Files\Mi
crosoft Visual Studio 9.0\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;<span style="color: #33cc33;">!</span><span style="color: #448888;">Path</span><span style="color: #33cc33;">!</span></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> &quot;VCRoot=<span style="color: #33cc33;">%</span><span style="color: #448888;">ProgramFiles</span><span style="color: #33cc33;">%</span>\Microsoft Visual Studio 9.0&quot;
<span style="color: #b1b100; font-weight: bold;">SET</span> &quot;VCTools=<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: #33cc33;">(</span>
  <span style="color: #b1b100; font-weight: bold;">SET</span> VCTools=
  <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: #33cc33;">)</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>
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/08/08/compilation-of-qt-4-6-3-under-windows-7-with-phonon/" rel="bookmark">Compilation of Qt 4.6.3 under Windows 7 with phonon</a><!-- (18.3)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/" rel="bookmark">Compilation of Phonon under Windows XP</a><!-- (17.8)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/" rel="bookmark">free Qt Visual Studio Integration</a><!-- (10.8)--></li>
	</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/feed/</wfw:commentRss>
		<slash:comments>3</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
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/03/06/mfc-books-to-read/" rel="bookmark">Books to read</a><!-- (7.7)--></li>
	</ol>
</div>
]]></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>



<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/03/06/mfc-books-to-read/" rel="bookmark">Books to read</a><!-- (7.7)--></li>
	</ol>
</div>
]]></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 [...]
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/06/16/qwt-spectrogramm-plot-with-data-arrays/" rel="bookmark">qwt spectrogramm plot with data arrays</a><!-- (14)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/04/27/mfc-flicker-free-example-with-cstatic-control/" rel="bookmark">Flicker Free example with CStatic Control</a><!-- (10.2)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/04/26/mfc-flicker-free-example-with-dialog/" rel="bookmark">Flicker Free example with dialog</a><!-- (7.2)--></li>
	</ol>
</div>
]]></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>



<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/06/16/qwt-spectrogramm-plot-with-data-arrays/" rel="bookmark">qwt spectrogramm plot with data arrays</a><!-- (14)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/04/27/mfc-flicker-free-example-with-cstatic-control/" rel="bookmark">Flicker Free example with CStatic Control</a><!-- (10.2)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/04/26/mfc-flicker-free-example-with-dialog/" rel="bookmark">Flicker Free example with dialog</a><!-- (7.2)--></li>
	</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2009/01/03/qt-spinbox-widget-with-scientific-notation/feed/</wfw:commentRss>
		<slash:comments>12</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. [...]
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/07/07/howto-integrate-qt-with-visual-studio/" rel="bookmark">Howto integrate Qt with Visual Studio</a><!-- (11.9)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/" rel="bookmark">Compilation of Phonon under Windows XP</a><!-- (9.4)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/03/07/mfc-how-to-end-the-application/" rel="bookmark">How to end the application</a><!-- (7)--></li>
	</ol>
</div>
]]></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 8\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>
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/07/07/howto-integrate-qt-with-visual-studio/" rel="bookmark">Howto integrate Qt with Visual Studio</a><!-- (11.9)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/" rel="bookmark">Compilation of Phonon under Windows XP</a><!-- (9.4)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/03/07/mfc-how-to-end-the-application/" rel="bookmark">How to end the application</a><!-- (7)--></li>
	</ol>
</div>
]]></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 [...]
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/08/08/compilation-of-qt-4-6-3-under-windows-7-with-phonon/" rel="bookmark">Compilation of Qt 4.6.3 under Windows 7 with phonon</a><!-- (30.2)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/" rel="bookmark">Windows SDK 7 messed up</a><!-- (17.5)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/" rel="bookmark">free Qt Visual Studio Integration</a><!-- (8.5)--></li>
	</ol>
</div>
]]></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>












<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/08/08/compilation-of-qt-4-6-3-under-windows-7-with-phonon/" rel="bookmark">Compilation of Qt 4.6.3 under Windows 7 with phonon</a><!-- (30.2)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2010/01/21/windows-sdk-7-messed-up/" rel="bookmark">Windows SDK 7 messed up</a><!-- (17.5)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2008/12/07/free-qt-visual-studio-integration/" rel="bookmark">free Qt Visual Studio Integration</a><!-- (8.5)--></li>
	</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2008/07/30/compilation-of-phonon-under-windows-xp/feed/</wfw:commentRss>
		<slash:comments>7</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 [...]
<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/04/26/mfc-flicker-free-example-with-dialog/" rel="bookmark">Flicker Free example with dialog</a><!-- (9.2)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2009/01/03/qt-spinbox-widget-with-scientific-notation/" rel="bookmark">Qt SpinBox Widget with Scientific Notation</a><!-- (9)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/04/27/mfc-flicker-free-example-with-cstatic-control/" rel="bookmark">Flicker Free example with CStatic Control</a><!-- (7.6)--></li>
	</ol>
</div>
]]></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>



<div class="related-posts">
<h4>Related Posts</h4>
<ol>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/04/26/mfc-flicker-free-example-with-dialog/" rel="bookmark">Flicker Free example with dialog</a><!-- (9.2)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2009/01/03/qt-spinbox-widget-with-scientific-notation/" rel="bookmark">Qt SpinBox Widget with Scientific Notation</a><!-- (9)--></li>
		<li><a href="http://www.matthiaspospiech.de/blog/2007/04/27/mfc-flicker-free-example-with-cstatic-control/" rel="bookmark">Flicker Free example with CStatic Control</a><!-- (7.6)--></li>
	</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.matthiaspospiech.de/blog/2008/06/16/qwt-spectrogramm-plot-with-data-arrays/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

