湛江网站建设模板定位工厂,网站建设详细的步骤有哪些,医院网站 行风建设,知名中文网站建设1.简介 QwtKnob是Qwt库中的一个类#xff0c;用于绘制一个旋钮样式的仪表盘。它继承QwtAbstractSlider类#xff0c;提供了一些额外的功能和样式#xff0c;用于旋转和选择值。
以下是类继承关系#xff1a; 2.常用方法
旋钮#xff08;Knob#xff09;相关的属性和方法…1.简介 QwtKnob是Qwt库中的一个类用于绘制一个旋钮样式的仪表盘。它继承QwtAbstractSlider类提供了一些额外的功能和样式用于旋转和选择值。
以下是类继承关系 2.常用方法
旋钮Knob相关的属性和方法
void setKnobStyle(KnobStyle style) 设置旋钮的样式如圆形、凹形、凸形等。KnobStyle knobStyle() const 返回旋钮的样式。void setKnobWidth(int width) 设置旋钮的宽度。int knobWidth() const 返回旋钮的宽度。
void setScale (const QwtScaleDiv scaleDiv) 设置范围
void setValue (double value) 设置当前值
void setBorderWidth (int borderWidth) 设置边框宽
标记相关的属性和方法
void setMarkerStyle (MarkerStyle markerStyle) 设置标记样式
void setMarkerSize (int size) 设置标记大小
3.示例 #pragma once#include qwt_global.h
#include QWidgetclass QwtKnob;
class QLabel;class Knob : public QWidget
{Q_OBJECTQ_PROPERTY( QColor theme READ theme WRITE setTheme )public:Knob( const QString title,double min, double max, QWidget* parent NULL );virtual QSize sizeHint() const QWT_OVERRIDE;//设置当前值void setValue( double value );double value() const;//设置颜色void setTheme( const QColor );QColor theme() const;Q_SIGNALS:double valueChanged( double );protected:virtual void resizeEvent( QResizeEvent* ) QWT_OVERRIDE;private:QwtKnob* m_knob nullptr;QLabel* m_label nullptr;
};#include Knob.h
#include qwt_math.h
#include qwt_knob.h
#include qwt_round_scale_draw.h
#include qwt_scale_engine.h#include QLabel
#include QResizeEvent
#include qmath.hKnob::Knob( const QString title, double min, double max, QWidget* parent ): QWidget( parent )
{QFont font( Helvetica, 10 );m_knob new QwtKnob( this );//设置字体m_knob-setFont( font );QwtScaleDiv scaleDiv m_knob-scaleEngine()-divideScale( min, max, 5, 3 );QList double ticks scaleDiv.ticks( QwtScaleDiv::MajorTick );if ( ticks.size() 0 ticks[0] min ){if ( ticks.first() min )ticks.prepend( min );if ( ticks.last() max )ticks.append( max );}//设置刻度scaleDiv.setTicks( QwtScaleDiv::MajorTick, ticks );//设置范围m_knob-setScale( scaleDiv );//设置旋钮宽度m_knob-setKnobWidth( 50 );//设置旋钮样式m_knob-setKnobStyle(QwtKnob::Raised);//m_knob-setKnobWidth(1);//设置标记风格m_knob-setMarkerStyle(QwtKnob::Nub);//设置标记大小m_knob-setMarkerSize(8);//设置边框宽度m_knob-setBorderWidth(2);font.setBold( true );m_label new QLabel( title, this );m_label-setFont( font );m_label-setAlignment( Qt::AlignTop | Qt::AlignHCenter );setSizePolicy( QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding );connect( m_knob, SIGNAL(valueChanged(double)),this, SIGNAL(valueChanged(double)) );
}QSize Knob::sizeHint() const
{QSize sz1 m_knob-sizeHint();QSize sz2 m_label-sizeHint();const int w qMax( sz1.width(), sz2.width() );const int h sz1.height() sz2.height();int off qCeil( m_knob-scaleDraw()-extent( m_knob-font() ) );off - 15; // spacingreturn QSize( w, h - off );
}void Knob::setValue( double value )
{m_knob-setValue( value );
}double Knob::value() const
{return m_knob-value();
}void Knob::setTheme( const QColor color )
{m_knob-setPalette( color );
}QColor Knob::theme() const
{return m_knob-palette().color( QPalette::Window );
}void Knob::resizeEvent( QResizeEvent* event )
{const QSize sz event-size();const QSize hint m_label-sizeHint();m_label-setGeometry( 0, sz.height() - hint.height(),sz.width(), hint.height() );const int knobHeight m_knob-sizeHint().height();int off qCeil( m_knob-scaleDraw()-extent( m_knob-font() ) );off - 15; // spacingm_knob-setGeometry( 0, m_label-pos().y() - knobHeight off,sz.width(), knobHeight );
}使用
#include KnobWidget.h
#include ui_KnobWidget.h
#include Knob.hstatic QPalette colorTheme( const QColor base )
{QPalette palette;palette.setColor( QPalette::Base, base );palette.setColor( QPalette::Window, base.darker( 150 ) );palette.setColor( QPalette::Mid, base.darker( 110 ) );palette.setColor( QPalette::Light, base.lighter( 170 ) );palette.setColor( QPalette::Dark, base.darker( 170 ) );palette.setColor( QPalette::Text, base.darker( 200 ).lighter( 800 ) );palette.setColor( QPalette::WindowText, base.darker( 200 ) );return palette;
}KnobWidget::KnobWidget(QWidget *parent) :QWidget(parent),ui(new Ui::KnobWidget)
{ui-setupUi(this);setPalette( colorTheme( QColor( Qt::darkGray ).darker( 70 ) ) );Knob *knob1 new Knob( Amplitude, 0.0, 200.0 );knob1-setValue( 160.0 );knob1-setTheme(QColor(#606060));Knob *knob2 new Knob( Frequency [Hz], 0.0, 20.0 );knob2-setValue( 17.8 );knob2-setTheme(QColor(#606060));ui-horizontalLayout-addWidget(knob1);ui-horizontalLayout-addWidget(knob2);
}KnobWidget::~KnobWidget()
{delete ui;
}