⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qwt__knob_8cpp-source.html

📁 QWT5.01用于Qt开发的二维图形库程序
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<a name="l00174"></a>00174 <a name="l00179"></a><a class="code" href="class_qwt_knob.html#3154037eec8c76c24577b8bf1d92b871">00179</a> <a class="code" href="class_qwt_round_scale_draw.html">QwtRoundScaleDraw</a> *<a class="code" href="class_qwt_knob.html#a9c4c23e20fc59b3ca2bfed9fe1e3719">QwtKnob::scaleDraw</a>()<a name="l00180"></a>00180 {<a name="l00181"></a>00181     <span class="keywordflow">return</span> (<a class="code" href="class_qwt_round_scale_draw.html">QwtRoundScaleDraw</a> *)<a class="code" href="class_qwt_abstract_scale.html#b3c5f30892792e5ca3d84f4409ef6216">abstractScaleDraw</a>();<a name="l00182"></a>00182 }<a name="l00183"></a>00183 <a name="l00189"></a><a class="code" href="class_qwt_knob.html#d6215b28cce14d6575332440ac0fd707">00189</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_knob.html#d6215b28cce14d6575332440ac0fd707">QwtKnob::drawKnob</a>(QPainter *painter, <span class="keyword">const</span> QRect &amp;r)<a name="l00190"></a>00190 {<a name="l00191"></a>00191 <span class="preprocessor">#if QT_VERSION &lt; 0x040000</span><a name="l00192"></a>00192 <span class="preprocessor"></span>    <span class="keyword">const</span> QBrush buttonBrush = colorGroup().brush(QColorGroup::Button);<a name="l00193"></a>00193     <span class="keyword">const</span> QColor buttonTextColor = colorGroup().buttonText();<a name="l00194"></a>00194     <span class="keyword">const</span> QColor lightColor = colorGroup().light();<a name="l00195"></a>00195     <span class="keyword">const</span> QColor darkColor = colorGroup().dark();<a name="l00196"></a>00196 <span class="preprocessor">#else</span><a name="l00197"></a>00197 <span class="preprocessor"></span>    <span class="keyword">const</span> QBrush buttonBrush = palette().brush(QPalette::Button);<a name="l00198"></a>00198     <span class="keyword">const</span> QColor buttonTextColor = palette().color(QPalette::ButtonText);<a name="l00199"></a>00199     <span class="keyword">const</span> QColor lightColor = palette().color(QPalette::Light);<a name="l00200"></a>00200     <span class="keyword">const</span> QColor darkColor = palette().color(QPalette::Dark);<a name="l00201"></a>00201 <span class="preprocessor">#endif</span><a name="l00202"></a>00202 <span class="preprocessor"></span><a name="l00203"></a>00203     <span class="keyword">const</span> <span class="keywordtype">int</span> bw2 = d_data-&gt;borderWidth / 2;<a name="l00204"></a>00204 <a name="l00205"></a>00205     <span class="keyword">const</span> <span class="keywordtype">int</span> radius = (qwtMin(r.width(), r.height()) - bw2) / 2;<a name="l00206"></a>00206 <a name="l00207"></a>00207     <span class="keyword">const</span> QRect aRect( <a name="l00208"></a>00208         r.center().x() - radius, r.center().y() - radius,<a name="l00209"></a>00209         2 * radius, 2 * radius);<a name="l00210"></a>00210 <a name="l00211"></a>00211     <span class="comment">//</span><a name="l00212"></a>00212     <span class="comment">// draw button face</span><a name="l00213"></a>00213     <span class="comment">//</span><a name="l00214"></a>00214     painter-&gt;setBrush(buttonBrush);<a name="l00215"></a>00215     painter-&gt;drawEllipse(aRect);<a name="l00216"></a>00216 <a name="l00217"></a>00217     <span class="comment">//</span><a name="l00218"></a>00218     <span class="comment">// draw button shades</span><a name="l00219"></a>00219     <span class="comment">//</span><a name="l00220"></a>00220     QPen pn;<a name="l00221"></a>00221     pn.setWidth(d_data-&gt;borderWidth);<a name="l00222"></a>00222 <a name="l00223"></a>00223     pn.setColor(lightColor);<a name="l00224"></a>00224     painter-&gt;setPen(pn);<a name="l00225"></a>00225     painter-&gt;drawArc(aRect, 45*16, 180*16);<a name="l00226"></a>00226 <a name="l00227"></a>00227     pn.setColor(darkColor);<a name="l00228"></a>00228     painter-&gt;setPen(pn);<a name="l00229"></a>00229     painter-&gt;drawArc(aRect, 225*16, 180*16);<a name="l00230"></a>00230 <a name="l00231"></a>00231     <span class="comment">//</span><a name="l00232"></a>00232     <span class="comment">// draw marker</span><a name="l00233"></a>00233     <span class="comment">//</span><a name="l00234"></a>00234     <span class="keywordflow">if</span> ( <a class="code" href="class_qwt_abstract_slider.html#87c750f098cb5f70306a7908339cb88e">isValid</a>() )<a name="l00235"></a>00235         <a class="code" href="class_qwt_knob.html#e30bd1ac7e8ce05e7714433864af6e3a">drawMarker</a>(painter, d_data-&gt;angle, buttonTextColor);<a name="l00236"></a>00236 }<a name="l00237"></a>00237 <a name="l00244"></a>00244 <span class="keywordtype">void</span> QwtKnob::valueChange()<a name="l00245"></a>00245 {<a name="l00246"></a>00246     recalcAngle();<a name="l00247"></a>00247     update();<a name="l00248"></a>00248     <a class="code" href="class_qwt_abstract_slider.html#2f04dc51e4402b51fef3250bcc99dc7f">QwtAbstractSlider::valueChange</a>();<a name="l00249"></a>00249 }<a name="l00250"></a>00250 <a name="l00257"></a>00257 <span class="keywordtype">double</span> QwtKnob::getValue(<span class="keyword">const</span> QPoint &amp;p)<a name="l00258"></a>00258 {<a name="l00259"></a>00259     <span class="keyword">const</span> <span class="keywordtype">double</span> dx = double((rect().x() + rect().width() / 2) - p.x() );<a name="l00260"></a>00260     <span class="keyword">const</span> <span class="keywordtype">double</span> dy = double((rect().y() + rect().height() / 2) - p.y() );<a name="l00261"></a>00261 <a name="l00262"></a>00262     <span class="keyword">const</span> <span class="keywordtype">double</span> arc = atan2(-dx,dy) * 180.0 / M_PI;<a name="l00263"></a>00263 <a name="l00264"></a>00264     <span class="keywordtype">double</span> newValue =  0.5 * (<a class="code" href="class_qwt_double_range.html#8b8650a6f8a96144d3af21207ee71637">minValue</a>() + <a class="code" href="class_qwt_double_range.html#215275a1a8b4218a424ee8444c7fe409">maxValue</a>())<a name="l00265"></a>00265        + (arc + d_data-&gt;nTurns * 360.0) * (<a class="code" href="class_qwt_double_range.html#215275a1a8b4218a424ee8444c7fe409">maxValue</a>() - <a class="code" href="class_qwt_double_range.html#8b8650a6f8a96144d3af21207ee71637">minValue</a>())<a name="l00266"></a>00266       / d_data-&gt;totalAngle;<a name="l00267"></a>00267 <a name="l00268"></a>00268     <span class="keyword">const</span> <span class="keywordtype">double</span> oneTurn = fabs(<a class="code" href="class_qwt_double_range.html#215275a1a8b4218a424ee8444c7fe409">maxValue</a>() - <a class="code" href="class_qwt_double_range.html#8b8650a6f8a96144d3af21207ee71637">minValue</a>()) * 360.0 / d_data-&gt;totalAngle;<a name="l00269"></a>00269     <span class="keyword">const</span> <span class="keywordtype">double</span> eqValue = <a class="code" href="class_qwt_double_range.html#7777cf257c812579c4891512f1b6cad0">value</a>() + <a class="code" href="class_qwt_abstract_slider.html#138397a755057932b5da72f526fc74e6">mouseOffset</a>();<a name="l00270"></a>00270 <a name="l00271"></a>00271     <span class="keywordflow">if</span> (fabs(newValue - eqValue) &gt; 0.5 * oneTurn)<a name="l00272"></a>00272     {<a name="l00273"></a>00273         <span class="keywordflow">if</span> (newValue &lt; eqValue)<a name="l00274"></a>00274            newValue += oneTurn;<a name="l00275"></a>00275         <span class="keywordflow">else</span><a name="l00276"></a>00276            newValue -= oneTurn;<a name="l00277"></a>00277     }<a name="l00278"></a>00278 <a name="l00279"></a>00279     <span class="keywordflow">return</span> newValue;    <a name="l00280"></a>00280 }<a name="l00281"></a>00281 <a name="l00288"></a>00288 <span class="keywordtype">void</span> QwtKnob::getScrollMode(<span class="keyword">const</span> QPoint &amp;p, <span class="keywordtype">int</span> &amp;scrollMode, <span class="keywordtype">int</span> &amp;direction)<a name="l00289"></a>00289 {<a name="l00290"></a>00290     <span class="keyword">const</span> <span class="keywordtype">int</span> r = d_data-&gt;knobRect.width() / 2;<a name="l00291"></a>00291 <a name="l00292"></a>00292     <span class="keyword">const</span> <span class="keywordtype">int</span> dx = d_data-&gt;knobRect.x() + r - p.x();<a name="l00293"></a>00293     <span class="keyword">const</span> <span class="keywordtype">int</span> dy = d_data-&gt;knobRect.y() + r - p.y();<a name="l00294"></a>00294 <a name="l00295"></a>00295     <span class="keywordflow">if</span> ( (dx * dx) + (dy * dy) &lt;= (r * r)) <span class="comment">// point is inside the knob</span><a name="l00296"></a>00296     {<a name="l00297"></a>00297         scrollMode = ScrMouse;<a name="l00298"></a>00298         direction = 0;<a name="l00299"></a>00299     }<a name="l00300"></a>00300     <span class="keywordflow">else</span>                                <span class="comment">// point lies outside</span><a name="l00301"></a>00301     {<a name="l00302"></a>00302         scrollMode = ScrTimer;<a name="l00303"></a>00303         <span class="keywordtype">double</span> arc = atan2(<span class="keywordtype">double</span>(-dx),<span class="keywordtype">double</span>(dy)) * 180.0 / M_PI;<a name="l00304"></a>00304         <span class="keywordflow">if</span> ( arc &lt; d_data-&gt;angle)<a name="l00305"></a>00305            direction = -1;<a name="l00306"></a>00306         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arc &gt; d_data-&gt;angle)<a name="l00307"></a>00307            direction = 1;<a name="l00308"></a>00308         <span class="keywordflow">else</span><a name="l00309"></a>00309            direction = 0;<a name="l00310"></a>00310     }<a name="l00311"></a>00311 }<a name="l00312"></a>00312 <a name="l00313"></a>00313 <a name="l00319"></a>00319 <span class="keywordtype">void</span> QwtKnob::rangeChange()<a name="l00320"></a>00320 {<a name="l00321"></a>00321     <span class="keywordflow">if</span> (<a class="code" href="class_qwt_abstract_scale.html#01f1f43502a8ba14988a0bd3142d94b1">autoScale</a>())<a name="l00322"></a>00322         <a class="code" href="class_qwt_abstract_scale.html#bd7c6b312b41882a3b509aadc9ada46e">rescale</a>(<a class="code" href="class_qwt_double_range.html#8b8650a6f8a96144d3af21207ee71637">minValue</a>(), <a class="code" href="class_qwt_double_range.html#215275a1a8b4218a424ee8444c7fe409">maxValue</a>());<a name="l00323"></a>00323 <a name="l00324"></a>00324     layoutKnob();<a name="l00325"></a>00325     recalcAngle();<a name="l00326"></a>00326 }<a name="l00327"></a>00327 <a name="l00331"></a><a class="code" href="class_qwt_knob.html#577c1fa6f26397ca356e679cce3a5c8c">00331</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_knob.html#577c1fa6f26397ca356e679cce3a5c8c">QwtKnob::resizeEvent</a>(QResizeEvent *)<a name="l00332"></a>00332 {<a name="l00333"></a>00333     layoutKnob( <span class="keyword">false</span> );<a name="l00334"></a>00334 }<a name="l00335"></a>00335 <a name="l00337"></a>00337 <span class="comment">//  the current rect and fonts.</span><a name="l00338"></a>00338 <span class="comment">//  \param update_geometry  notify the layout system and call update</span><a name="l00339"></a>00339 <span class="comment">//         to redraw the scale</span><a name="l00340"></a>00340 <span class="keywordtype">void</span> QwtKnob::layoutKnob( <span class="keywordtype">bool</span> update_geometry )<a name="l00341"></a>00341 {<a name="l00342"></a>00342     <span class="keyword">const</span> QRect r = rect();<a name="l00343"></a>00343     <span class="keyword">const</span> <span class="keywordtype">int</span> radius = d_data-&gt;knobWidth / 2;<a name="l00344"></a>00344 <a name="l00345"></a>00345     d_data-&gt;knobRect.setWidth(2 * radius);<a name="l00346"></a>00346     d_data-&gt;knobRect.setHeight(2 * radius);<a name="l00347"></a>00347     d_data-&gt;knobRect.moveCenter(r.center());<a name="l00348"></a>00348 <a name="l00349"></a>00349     <a class="code" href="class_qwt_knob.html#a9c4c23e20fc59b3ca2bfed9fe1e3719">scaleDraw</a>()-&gt;<a class="code" href="class_qwt_round_scale_draw.html#069d658989db2ad96f26b79a298f7d10">setRadius</a>(radius + d_data-&gt;scaleDist);<a name="l00350"></a>00350     <a class="code" href="class_qwt_knob.html#a9c4c23e20fc59b3ca2bfed9fe1e3719">scaleDraw</a>()-&gt;<a class="code" href="class_qwt_round_scale_draw.html#fe2226d225c3d7f50a85a80c86f5eb6e">moveCenter</a>(r.center());<a name="l00351"></a>00351 <a name="l00352"></a>00352     <span class="keywordflow">if</span> ( update_geometry )<a name="l00353"></a>00353     {<a name="l00354"></a>00354         updateGeometry();<a name="l00355"></a>00355         update();<a name="l00356"></a>00356     }<a name="l00357"></a>00357 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -