Music Player▲
Sélectionnez
/**
**************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
***************************************************************************
*/
#include
"volumebutton.h"
#include <QtWidgets>
#include <QtWinExtras>
VolumeButton::
VolumeButton(QWidget *
parent) :
QToolButton(parent)
{
setIcon(style()-&
gt;standardIcon(QStyle::
SP_MediaVolume));
setPopupMode(QToolButton::
InstantPopup);
QWidget *
popup =
new
QWidget(this
);
slider =
new
QSlider(Qt::
Horizontal, popup);
slider-&
gt;setRange(0
, 100
);
connect(slider, &
amp;QAbstractSlider::
valueChanged, this
, &
amp;VolumeButton::
volumeChanged);
label =
new
QLabel(popup);
label-&
gt;setAlignment(Qt::
AlignCenter);
label-&
gt;setNum(100
);
label-&
gt;setMinimumWidth(label-&
gt;sizeHint().width());
connect(slider, &
amp;QAbstractSlider::
valueChanged, label, QOverload&
lt;int
&
gt;::
of(&
amp;QLabel::
setNum));
QBoxLayout *
popupLayout =
new
QHBoxLayout(popup);
popupLayout-&
gt;setMargin(2
);
popupLayout-&
gt;addWidget(slider);
popupLayout-&
gt;addWidget(label);
QWidgetAction *
action =
new
QWidgetAction(this
);
action-&
gt;setDefaultWidget(popup);
menu =
new
QMenu(this
);
menu-&
gt;addAction(action);
setMenu(menu);
stylize();
}
void
VolumeButton::
increaseVolume()
{
slider-&
gt;triggerAction(QSlider::
SliderPageStepAdd);
}
void
VolumeButton::
descreaseVolume()
{
slider-&
gt;triggerAction(QSlider::
SliderPageStepSub);
}
int
VolumeButton::
volume() const
{
return
slider-&
gt;value();
}
void
VolumeButton::
setVolume(int
volume)
{
slider-&
gt;setValue(volume);
}
void
VolumeButton::
stylize()
{
if
(QOperatingSystemVersion::
current() &
lt; QOperatingSystemVersion::
Windows8) {
// Set styling options relevant only to Windows 7.
if
(QtWin::
isCompositionEnabled()) {
QtWin::
enableBlurBehindWindow(menu);
QString css("QMenu { border: 1px solid %1; border-radius: 2px; background: transparent; }"
);
menu-&
gt;setStyleSheet(css.arg(QtWin::
realColorizationColor().name()));
}
else
{
QtWin::
disableBlurBehindWindow(menu);
QString css("QMenu { border: 1px solid black; background: %1; }"
);
menu-&
gt;setStyleSheet(css.arg(QtWin::
realColorizationColor().name()));
}
}
}