Qt MapSlider

本文介绍了一个基于Qt的自定义滑块组件实现,包括如何创建带有缩放按钮的滑块,设置样式及响应事件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看看效果:

 
其实,这里用到的是一个QSlider和两个Label(上节Qt方向盘实现里用到的),Label这里就不多说了,直接看QMapSlider的实现:
class QMapSlider : public QWidget
{
    Q_OBJECT
 
public :
     explicit QMapSlider(QWidget *parent = 0);
     ~QMapSlider();
 
     void setTickInterval( int ti);
 
signals :
     void valueChanged( int);
 
public slots :
     void setOrientation(Qt : :Orientation);
     void setRange( int, int);
     void setValue( int);
 
private slots :
     void zoomInClicked();
     void zoomOutClicked();
     void sliderValueChanged( int);
 
private :
    Label * zoomIn;
    Label * zoomOut;
    QSlider * slider;
 
};
 
QMapSlider : :QMapSlider(QWidget *parent) :
    QWidget(parent)
{
    setMinimumWidth( 23);
    setMaximumWidth( 23);
 
    zoomIn = new Label( this);
    zoomIn - >setPixmap(QPixmap( ":/images/zoomin.png"));
    connect(zoomIn, SIGNAL(clicked()), this, SLOT(zoomInClicked()));
    zoomOut = new Label( this);
    zoomOut - >setPixmap(QPixmap( ":/images/zoomout.png"));
    connect(zoomOut, SIGNAL(clicked()), this, SLOT(zoomOutClicked()));
 
    slider = new QSlider(Qt : :Vertical, this);
    slider - >setRange( 0, 100);
    slider - >setTickInterval( 10);
    slider - >setValue( 50);
    connect(slider, SIGNAL(valueChanged( int)), this, SLOT(sliderValueChanged( int)));
 
    QVBoxLayout * mainLayout = new QVBoxLayout;
    mainLayout - >addWidget(zoomIn);
    mainLayout - >addWidget(slider);
    mainLayout - >addWidget(zoomOut);
    mainLayout - >setMargin( 0);
    mainLayout - >setSpacing( 0);
    setLayout(mainLayout);
 
    setStyleSheet( "QSlider::groove:vertical { background: rgb(250 ,250, 250);"
                   "position: absolute; left: 9px; right: 9px;"
                   "border:1px inset rgb(185, 185, 185);}"
                   "QSlider::handle:vertical { height: 13px;"
                   "background-image:url(\":/images/slidehandle.png\");"
                   "margin: 0 -9px;}");
}
 
QMapSlider : : ~QMapSlider()
{
}
 
void QMapSlider : :zoomInClicked()
{
     int value = slider - >value();
    slider - >setValue(value + slider - >tickInterval());
}
 
void QMapSlider : :zoomOutClicked()
{
     int value = slider - >value();
    slider - >setValue(value - slider - >tickInterval());
}
 
void QMapSlider : :sliderValueChanged( int value)
{
    emit valueChanged(value);
}
 
void QMapSlider : :setTickInterval( int ti)
{
    slider - >setTickInterval(ti);
}
 
void QMapSlider : :setOrientation(Qt : :Orientation orientation)
{
    slider - >setOrientation(orientation);
}
 
void QMapSlider : :setRange( int min, int max)
{
    slider - >setRange(min, max);
}
 
void QMapSlider : :setValue( int value)
{
    slider - >setValue(value);
}
这里就实现了zoomOutClick和zoomInClick两个函数,其他使用的基本都是QSlider的。
没什么好解释的,详情看完整代码:点击下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值