Qwt QwtKnob绘制旋钮

2023-11-07 04:28
文章标签 绘制 qwt 旋钮 qwtknob

本文主要是介绍Qwt QwtKnob绘制旋钮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 <QWidget>class 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.h>Knob::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.h"static 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;
}

这篇关于Qwt QwtKnob绘制旋钮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/361238

相关文章

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

使用matplotlib绘制散点图、柱状图和饼状图-学习篇

一、散点图 Python代码如下: num_points = 100x = np.random.rand(num_points) #x点位随机y = np.random.rand(num_points) #y点位随机colors = np.random.rand(num_points) #颜色随机sizes = 1000 * np.random.rand(num_points) # 大

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

Excel绘制CDF图

对如下20个原始数据绘制cdf图 1. 对数据进行排序,从小到大 2. 计算累积分布: 计算公式为: 然后对C3下拉,得到累积分布数据。 3. 选中B、C两列绘制散点图:

【python 图像绘制】图像绘制知识总结

颜色图谱 具体颜色描述autumn 红橙黄cool 青-洋红copper 黑-铜flag 红-白-蓝-黑gray 黑-白hot 黑-红-黄-白hsv hsv颜色空间, 红-黄-绿-青-蓝-洋红-红inferno 黑-红-黄jet 蓝-青-黄-红magma 黑-红-白pink 黑-粉-白plasma 绿-红-黄prism 红-黄-

【python 相关性分析】Python绘制相关性热力图

在数据分析时,经常会针对两个变量进行相关性分析。在Python中主要用到的方法是pandas中的corr()方法。 corr():如果由数据框调用corr函数,那么将会计算每个列两两之间的相似度,返回DataFrame # -*- coding: utf-8 -*-# 导入包import pandas as pdimport numpy as npimport matplotlib.py

流程图符号速查:快速掌握流程图绘制要点

流程图是一种以图形化方式表示算法或过程的步骤和逻辑关系的图表,它通过使用一系列标准的符号和连接线来清晰地展示流程的顺序和决策点。这种表示方法不仅使得复杂的过程更加易于理解,而且也便于跟踪和优化。以下是对流程图的进一步扩写,包括其制作步骤、应用场景和一些实用技巧。流程图常常用来表示一些动态过程,通常会有一个“起点”, 可以有一个或多个终点,流程图可以直观、明确地表示动态过程从开始到结束的全部步骤,在