本文主要是介绍Qt 重写QSlider简单实现滑动解锁控件(指定百分比回弹效果),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
组件效果图:
应用场景:
用于滑动解锁相关场景,Qt的控件鼠标监听机制对于嵌入式设备GUI可触摸屏依旧可用。
实现方式:
主要是通过继承QSlider以及搭配使用QStyleOptionSlider来实现效果。
注意细则:
QStyleOptionSlider是用于定制空白区域是否可移动滑块,根据需求可舍弃。
组件代码:
PS:代码效果也就是如图所示的效果,至于样式或者其他事件机制,切换逻辑就根据自己需求扩展。
#ifndef QSLIDERCOMPONENT_H
#define QSLIDERCOMPONENT_H#include <QObject>
#include <QWidget>
#include <QSlider>class QSliderComponent : public QSlider
{Q_OBJECT
public:explicit QSliderComponent(QWidget *parent = nullptr);protected:void mousePressEvent(QMouseEvent *ev) override;
};#endif // QSLIDERCOMPONENT_H
#include "qslidercomponent.h"
#include <QStyleOptionSlider>
#include <QMouseEvent>
#include <QDebug>QSliderComponent::QSliderComponent(QWidget *parent) : QSlider(parent)
{}void QSliderComponent::mousePressEvent(QMouseEvent *ev)
{QStyleOptionSlider *QSOslider = new QStyleOptionSlider();this->initStyleOption(QSOslider);auto pressedControl = this->style()->hitTestComplexControl(QStyle::CC_Slider, QSOslider, ev->pos(), this);if(pressedControl == QStyle::SC_SliderGroove){ev->accept();}elseQSlider::mousePressEvent(ev);
}
使用示例:
sliderControl = new QSliderComponent(this);sliderControl->resize(250, 42);sliderControl->move(35, 172);sliderControl->setRange(0, 100);sliderControl->setOrientation(Qt::Horizontal);sliderControl->setStyleSheet("QSlider::groove:horizontal{ height:30px; border: 1px solid grey; border-radius: 5px;}""QSlider::handle:horizontal{ width:50px; background-color: blue; border-radius: 5px;}");// "QSlider::handle:horizontal{ width:50px; border-image:url(:/page/unlock_screen_arrow.png)}");sliderControl->show();# 具体的逻辑添加,滑块释放以及是否达到指定某个值,进而处理某些业务connect(sliderControl, &QSliderComponent::sliderReleased, [=](){if(sliderControl->value() != 100)sliderControl->setValue(0);
// else
// emit unlockScreen();});
这篇关于Qt 重写QSlider简单实现滑动解锁控件(指定百分比回弹效果)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!