先来看看效果:
其实,这里用到的是一个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);
}
{
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的。
没什么好解释的,详情看完整代码:点击下载