【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,能够显著提升那些需要频繁、直观参数调节的应用的交互品质与专业感。


感谢各位大佬支持!!!

互三啦!!!

相关推荐
用户805533698034 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner4 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz9 天前
QML Hello World 入门示例
qt
xcyxiner12 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner13 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner13 天前
DicomViewer (添加模型类)3
qt
xcyxiner14 天前
DicomViewer (目录调整) 2
qt
xcyxiner14 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00616 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术16 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript