输入窗口部件(十一)

Qdial

QDial 是 Qt 中的一个输入控件,用于实现一个圆形的旋转拨号盘。用户可以通过旋转拨号盘来选择一个值。它通常用于需要用户选择一个范围内的数值的场景,比如音量调节、亮度控制等。此处示例显示速度表。

主要特点

  1. 外观

    • QDial 以圆形的方式显示,用户可以通过鼠标拖动或手指滑动来选择值。
  2. 范围设置

    • 可以设置最小值和最大值,用户选择的值会在这个范围内。
  3. 步进值

    • 可以设置每次旋转所增加或减少的值(步进值),这使得用户在选择值时更具灵活性。
  4. 信号与槽

    • QDial 提供了信号(如 valueChanged(int value)),可以在值改变时触发特定的操作。
  5. 自定义外观

    • 可以通过样式表或自定义绘制来改变 QDial 的外观。

使用示例

以下是一个简单的示例,展示了如何使用 QDial 控件:

#include <QApplication>
#include <QDial>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    // 创建 QDial
    QDial *dial = new QDial();
    dial->setRange(0, 100); // 设置范围
    dial->setValue(50); // 设置初始值

    // 创建 QLabel 显示当前值
    QLabel *label = new QLabel("Current Value: 50");
    
    // 连接信号和槽
    QObject::connect(dial, &QDial::valueChanged, [&label](int value) {
        label->setText(QString("Current Value: %1").arg(value));
    });

    layout->addWidget(dial);
    layout->addWidget(label);
    
    window.setLayout(layout);
    window.setWindowTitle("QDial Example");
    window.show();

    return app.exec();
}

示例二

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDial>
#include <QLabel>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QDial *dial;
    QLabel *label;

private slots:
    void dialValueChanged(int);
};
#endif // MAINWINDOW_H

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this -> setGeometry(0,0,800,480);

    dial = new QDial(this);
    dial -> setGeometry(300,100,200,200);

    /*设置页长(两个最大刻度的间距)*/
    dial -> setPageStep(10);

    /*设置刻度可见*/
    dial -> setNotchesVisible(true);

    /*设置两个凹槽之间的目标像素数*/
    dial -> setNotchTarget(1.00);

    /*设置dial值的范围*/
    dial -> setRange(0,100);

    /*开启后可指向圆的任何角度*/
    dial -> setWrapping(true);

    /*实例化对象*/
    label = new QLabel(this);
    label -> setGeometry(370,300,200,50);

    /*初始化为0km/h*/
    label -> setText("0Km/h");

    connect(dial,SIGNAL(valueChanged(int)),
            this,SLOT(dialValueChanged(int)));
}

MainWindow::~MainWindow() {}

void MainWindow::dialValueChanged(int val)
{
    /*QString::number()转换成字符串*/
    label->setText(QString::number(val)+"Km/h");
}

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

运行结果:
在这里插入图片描述

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值