【Qt开发】输入类控件(六)-> QDial

目录

[1 -> 概述](#1 -> 概述)

[2 -> 核心属性](#2 -> 核心属性)

[3 -> 核心信号](#3 -> 核心信号)

[4 -> 核心交互特性](#4 -> 核心交互特性)

[5 -> 视觉与风格](#5 -> 视觉与风格)

[6 -> 典型应用场景](#6 -> 典型应用场景)

[7 -> 与QSlider的对比与选择](#7 -> 与QSlider的对比与选择)

[8 -> 代码示例](#8 -> 代码示例)

[8.1 -> 调整窗口透明度](#8.1 -> 调整窗口透明度)

[9 -> 总结](#9 -> 总结)


1 -> 概述

在构建图形用户界面时,我们常常需要让用户在一个确定的数值范围内进行选择。虽然下拉列表、滑块和数字输入框都能实现这一目标,但Qt提供了一个更具物理世界隐喻和交互感的控件------QDial,即旋钮控件。

QDial的核心设计理念源于我们熟悉的物理旋钮,例如收音机上的音量开关、老式收音机的调频盘或工业设备上的参数调节器。它的存在,不仅仅是为了输入一个数值,更是为了提供一种符合用户心智模型的、直观的旋转操作体验。

与纯粹的线性滑块相比,旋钮在视觉上更紧凑,尤其适合在需要频繁、精细调整,或空间有限的界面布局中使用。它能立刻向用户传达一个信息:"这是一个可以通过旋转来调节的参数。

2 -> 核心属性

|--------------------|----------------------------------------------------------|
| 属性 | 说明 |
| value | 持有的数值 |
| minimum | 最小值 |
| maximum | 最大值 |
| singleStep | 按下方向键的时候改变的步长 |
| pageStep | 按下 pageUp / pageDown 的时候改变的步长 |
| sliderPosition | 界面上旋钮显示的初始位置 |
| tracking | 外观是否会跟踪数值变化 默认为 true,一般不需要修改 |
| wrapping | 是否允许循环调整 即数值如果超过最大值,是否允许回到最小值 (调整过程能否 "套圈" ) |
| notchesVisible | 是否显示刻度线 |
| notchTarget | 刻度线之间的相对位置 数字越大,刻度线越稀疏 |

3 -> 核心信号

|----------------------------|-------------|
| 属性 | 说明 |
| valueChanged(int) | 数值改变时触发 |
| rangeChanged(int, int) | 范围变化时触发 |

4 -> 核心交互特性

QDial的交互方式是其灵魂所在,它提供了几种灵活的操作模式:

  • 鼠标拖动旋转:最直接的方式,用户可以通过按住并拖动旋钮的"指针"或边缘来改变其值。这种模拟物理旋钮的阻尼感和惯性(虽然默认实现简单),带来了直接的操控反馈。

  • 鼠标滚轮调节:当鼠标悬停在QDial上时,通过滚动滚轮可以精确地微调数值,这为需要精细控制的场景提供了便利。

  • 键盘导航控制:对于注重无障碍访问或键盘操作效率的用户,QDial同样支持通过键盘方向键进行步进式的数值调整。

此外,QDial支持循环滚动的选项。当启用时,旋钮的值达到最大值后,继续旋转会跳回到最小值,反之亦然。这非常适合用于调节角度或相位等循环参数。

5 -> 视觉与风格

QDial的外观高度依赖于当前应用程序所使用的Qt风格主题。在不同的操作系统或自定义主题下,它可能呈现为现代的扁平化圆盘,也可能是有立体感的、带有凹槽或刻度的仿真旋钮。

开发者可以自定义其外观的方方面面:

  • 刻度线:可以显示或不显示刻度线,并可以选择主刻度和次刻度的密度,刻度可以绘制在旋钮内部或外部。

  • 数值范围:可以灵活地设置最小值、最大值和当前值,以适应不同的参数需求(如0-100的音量,-180到+180的相位等)。

  • 旋钮外观:虽然默认样式由主题决定,但通过Qt强大的样式表机制,开发者几乎可以完全重新设计QDial的外观,包括其背景、指针、凹槽的颜色、渐变色乃至添加自定义图片,从而创造出与应用程序品牌高度契合的独特设计。

6 -> 典型应用场景

QDial并非万能控件,它在特定场景下能发挥出最大优势:

  1. 音频与视频应用:这是最经典的应用。调节音量、平衡、高低音均衡器,或是视频编辑软件中的色彩饱和度、亮度等。旋转操作非常符合用户对这类参数调节的直觉。

  2. 工业控制与仪表盘:在模拟工业控制面板或汽车仪表盘的界面中,QDial能够完美地复现各种物理仪表和调节开关,增强界面的真实感和专业性。

  3. 数据可视化与参数调整:在3D建模、图像处理或科学计算软件中,用于实时调整观察角度、滤镜强度、算法参数等。用户可以一边旋转旋钮,一边观察画布或数据图的实时变化,交互体验非常流畅。

  4. 紧凑空间内的输入:当界面布局非常拥挤,无法容纳一个水平的滑块时,圆形的QDial可以节省宝贵的垂直或水平空间。

7 -> 与QSlider的对比与选择

在选择使用QDial还是其兄弟控件QSlider时,开发者需要考虑以下几点:

  • 精度与范围:对于非常大的数值范围,线性滑块通常能提供更精确的定位。而旋钮在极端值附近操作时(例如从359度调到0度)可能会因为循环特性而产生困惑。

  • 空间与布局:滑块需要一条直线空间,而旋钮需要一个方形空间。根据界面整体布局,其中一种可能更合适。

  • 用户习惯与隐喻:如果调节的参数在用户心智中本身就是一个"旋钮"(如音量),那么QDial是更自然的选择。如果是一个线性进度或位置,则滑块更佳。

8 -> 代码示例

8.1 -> 调整窗口透明度

1. 在界面上创建一个旋钮

2. 对旋钮初始化

3. 编写 widget.cpp,设置旋钮的 valueChanged slot 函数

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_dial_valueChanged(int value)
{
    qDebug() << value;
    this->setWindowOpacity((double)value / 100);
}

4. 运行程序,观察效果,可以看到随着拖动旋钮旋转,不透明度发生明显变化

9 -> 总结

QDial 是 Qt 控件库中一个极具特色的成员。它超越了简单的数值输入功能,通过模拟物理世界的交互方式,为应用程序注入了更直观、更富触感的用户体验。尽管在绝对精度和大范围调整上可能略逊于滑块,但它在紧凑性、特定领域的隐喻契合度以及视觉表现力方面拥有无可替代的优势。合理地运用 QDial,能够显著提升那些需要频繁、直观参数调节的应用的交互品质与专业感。


感谢各位大佬支持!!!

互三啦!!!

相关推荐
思考的笛卡尔3 小时前
Go语言实战:高并发服务器设计与实现
服务器·开发语言·golang
努力努力再努力wz3 小时前
【C++进阶系列】:万字详解智能指针(附模拟实现的源码)
java·linux·c语言·开发语言·数据结构·c++·python
凤年徐3 小时前
【C++】string的模拟实现
c语言·开发语言·c++
敲代码的嘎仔3 小时前
JavaWeb零基础学习Day2——JS & Vue
java·开发语言·前端·javascript·数据结构·学习·算法
吃鱼吃鱼吃不动了3 小时前
什么是负载均衡?
开发语言·php
小蕾Java4 小时前
Python详细安装教程(附PyCharm使用)
开发语言·python·pycharm
weixin_307779134 小时前
AWS云上ClickHouse数据仓库部署方案详解
开发语言·clickhouse·自动化·云计算·aws
weixin_307779134 小时前
使用AWS IAM和Python自动化权限策略分析与导出
开发语言·python·自动化·云计算·aws
惜月_treasure4 小时前
从零构建私域知识库问答机器人:Python 全栈实战(附完整源码)
开发语言·python·机器人