Qdial
QDial
是 Qt 中的一个输入控件,用于实现一个圆形的旋转拨号盘。用户可以通过旋转拨号盘来选择一个值。它通常用于需要用户选择一个范围内的数值的场景,比如音量调节、亮度控制等。此处示例显示速度表。
主要特点
-
外观:
QDial
以圆形的方式显示,用户可以通过鼠标拖动或手指滑动来选择值。
-
范围设置:
- 可以设置最小值和最大值,用户选择的值会在这个范围内。
-
步进值:
- 可以设置每次旋转所增加或减少的值(步进值),这使得用户在选择值时更具灵活性。
-
信号与槽:
QDial
提供了信号(如valueChanged(int value)
),可以在值改变时触发特定的操作。
-
自定义外观:
- 可以通过样式表或自定义绘制来改变
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();
}
运行结果: