📄 qwt__knob_8cpp-source.html
字号:
<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 &r)<a name="l00190"></a>00190 {<a name="l00191"></a>00191 <span class="preprocessor">#if QT_VERSION < 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->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->setBrush(buttonBrush);<a name="l00215"></a>00215 painter->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->borderWidth);<a name="l00222"></a>00222 <a name="l00223"></a>00223 pn.setColor(lightColor);<a name="l00224"></a>00224 painter->setPen(pn);<a name="l00225"></a>00225 painter->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->setPen(pn);<a name="l00229"></a>00229 painter->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->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 &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->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->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->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) > 0.5 * oneTurn)<a name="l00272"></a>00272 {<a name="l00273"></a>00273 <span class="keywordflow">if</span> (newValue < 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 &p, <span class="keywordtype">int</span> &scrollMode, <span class="keywordtype">int</span> &direction)<a name="l00289"></a>00289 {<a name="l00290"></a>00290 <span class="keyword">const</span> <span class="keywordtype">int</span> r = d_data->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->knobRect.x() + r - p.x();<a name="l00293"></a>00293 <span class="keyword">const</span> <span class="keywordtype">int</span> dy = d_data->knobRect.y() + r - p.y();<a name="l00294"></a>00294 <a name="l00295"></a>00295 <span class="keywordflow">if</span> ( (dx * dx) + (dy * dy) <= (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 < d_data->angle)<a name="l00305"></a>00305 direction = -1;<a name="l00306"></a>00306 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (arc > d_data->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->knobWidth / 2;<a name="l00344"></a>00344 <a name="l00345"></a>00345 d_data->knobRect.setWidth(2 * radius);<a name="l00346"></a>00346 d_data->knobRect.setHeight(2 * radius);<a name="l00347"></a>00347 d_data->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>()-><a class="code" href="class_qwt_round_scale_draw.html#069d658989db2ad96f26b79a298f7d10">setRadius</a>(radius + d_data->scaleDist);<a name="l00350"></a>00350 <a class="code" href="class_qwt_knob.html#a9c4c23e20fc59b3ca2bfed9fe1e3719">scaleDraw</a>()-><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 + -