Mega Code Archive

 
Categories / C++ / Qt
 

Slider group

/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file.  Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights.  These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file.  Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef SLIDERSGROUP_H #define SLIDERSGROUP_H #include <QGroupBox> QT_BEGIN_NAMESPACE class QDial; class QScrollBar; class QSlider; QT_END_NAMESPACE class SlidersGroup : public QGroupBox {     Q_OBJECT public:     SlidersGroup(Qt::Orientation orientation, const QString &title,                  QWidget *parent = 0); signals:     void valueChanged(int value); public slots:     void setValue(int value);     void setMinimum(int value);     void setMaximum(int value);     void invertAppearance(bool invert);     void invertKeyBindings(bool invert); private:     QSlider *slider;     QScrollBar *scrollBar;     QDial *dial; }; #endif #include <QtGui> #include "slidersgroup.h" SlidersGroup::SlidersGroup(Qt::Orientation orientation, const QString &title,                            QWidget *parent)     : QGroupBox(title, parent) {     slider = new QSlider(orientation);     slider->setFocusPolicy(Qt::StrongFocus);     slider->setTickPosition(QSlider::TicksBothSides);     slider->setTickInterval(10);     slider->setSingleStep(1);     scrollBar = new QScrollBar(orientation);     scrollBar->setFocusPolicy(Qt::StrongFocus);     dial = new QDial;     dial->setFocusPolicy(Qt::StrongFocus);     connect(slider, SIGNAL(valueChanged(int)), scrollBar, SLOT(setValue(int)));     connect(scrollBar, SIGNAL(valueChanged(int)), dial, SLOT(setValue(int)));     connect(dial, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));       connect(dial, SIGNAL(valueChanged(int)), this, SIGNAL(valueChanged(int)));         QBoxLayout::Direction direction;       if (orientation == Qt::Horizontal)         direction = QBoxLayout::TopToBottom;     else         direction = QBoxLayout::LeftToRight;     QBoxLayout *slidersLayout = new QBoxLayout(direction);     slidersLayout->addWidget(slider);     slidersLayout->addWidget(scrollBar);     slidersLayout->addWidget(dial);     setLayout(slidersLayout); } void SlidersGroup::setValue(int value)   {     slider->setValue(value); } void SlidersGroup::setMinimum(int value)   {     slider->setMinimum(value);     scrollBar->setMinimum(value);     dial->setMinimum(value); } void SlidersGroup::setMaximum(int value)   {     slider->setMaximum(value);     scrollBar->setMaximum(value);     dial->setMaximum(value); } void SlidersGroup::invertAppearance(bool invert)   {     slider->setInvertedAppearance(invert);     scrollBar->setInvertedAppearance(invert);     dial->setInvertedAppearance(invert); } void SlidersGroup::invertKeyBindings(bool invert)   {     slider->setInvertedControls(invert);     scrollBar->setInvertedControls(invert);     dial->setInvertedControls(invert); } #ifndef WINDOW_H #define WINDOW_H #include <QWidget> QT_BEGIN_NAMESPACE class QCheckBox; class QComboBox; class QGroupBox; class QLabel; class QSpinBox; class QStackedWidget; QT_END_NAMESPACE class SlidersGroup; class Window : public QWidget {     Q_OBJECT public:     Window(); private:     void createControls(const QString &title);     SlidersGroup *horizontalSliders;     SlidersGroup *verticalSliders;     QStackedWidget *stackedWidget;     QGroupBox *controlsGroup;     QLabel *minimumLabel;     QLabel *maximumLabel;     QLabel *valueLabel;     QCheckBox *invertedAppearance;     QCheckBox *invertedKeyBindings;     QSpinBox *minimumSpinBox;     QSpinBox *maximumSpinBox;     QSpinBox *valueSpinBox;     QComboBox *orientationCombo; }; #endif #include <QtGui> #include "slidersgroup.h" #include "window.h" Window::Window() {     horizontalSliders = new SlidersGroup(Qt::Horizontal, tr("Horizontal"));     verticalSliders = new SlidersGroup(Qt::Vertical, tr("Vertical"));     stackedWidget = new QStackedWidget;     stackedWidget->addWidget(horizontalSliders);     stackedWidget->addWidget(verticalSliders);     createControls(tr("Controls"));     connect(horizontalSliders, SIGNAL(valueChanged(int)),               verticalSliders, SLOT(setValue(int)));     connect(verticalSliders, SIGNAL(valueChanged(int)),             valueSpinBox, SLOT(setValue(int)));     connect(valueSpinBox, SIGNAL(valueChanged(int)),             horizontalSliders, SLOT(setValue(int)));     QHBoxLayout *layout = new QHBoxLayout;     layout->addWidget(controlsGroup);     layout->addWidget(stackedWidget);     setLayout(layout);     minimumSpinBox->setValue(0);     maximumSpinBox->setValue(20);     valueSpinBox->setValue(5);     setWindowTitle(tr("Sliders")); } void Window::createControls(const QString &title)   {     controlsGroup = new QGroupBox(title);     minimumLabel = new QLabel(tr("Minimum value:"));     maximumLabel = new QLabel(tr("Maximum value:"));     valueLabel = new QLabel(tr("Current value:"));     invertedAppearance = new QCheckBox(tr("Inverted appearance"));     invertedKeyBindings = new QCheckBox(tr("Inverted key bindings"));       minimumSpinBox = new QSpinBox;       minimumSpinBox->setRange(-100, 100);     minimumSpinBox->setSingleStep(1);     maximumSpinBox = new QSpinBox;     maximumSpinBox->setRange(-100, 100);     maximumSpinBox->setSingleStep(1);     valueSpinBox = new QSpinBox;     valueSpinBox->setRange(-100, 100);     valueSpinBox->setSingleStep(1);     orientationCombo = new QComboBox;     orientationCombo->addItem(tr("Horizontal slider-like widgets"));     orientationCombo->addItem(tr("Vertical slider-like widgets"));       connect(orientationCombo, SIGNAL(activated(int)),               stackedWidget, SLOT(setCurrentIndex(int)));     connect(minimumSpinBox, SIGNAL(valueChanged(int)),             horizontalSliders, SLOT(setMinimum(int)));     connect(minimumSpinBox, SIGNAL(valueChanged(int)),             verticalSliders, SLOT(setMinimum(int)));     connect(maximumSpinBox, SIGNAL(valueChanged(int)),             horizontalSliders, SLOT(setMaximum(int)));     connect(maximumSpinBox, SIGNAL(valueChanged(int)),             verticalSliders, SLOT(setMaximum(int)));     connect(invertedAppearance, SIGNAL(toggled(bool)),             horizontalSliders, SLOT(invertAppearance(bool)));     connect(invertedAppearance, SIGNAL(toggled(bool)),             verticalSliders, SLOT(invertAppearance(bool)));     connect(invertedKeyBindings, SIGNAL(toggled(bool)),             horizontalSliders, SLOT(invertKeyBindings(bool)));     connect(invertedKeyBindings, SIGNAL(toggled(bool)),             verticalSliders, SLOT(invertKeyBindings(bool)));     QGridLayout *controlsLayout = new QGridLayout;     controlsLayout->addWidget(minimumLabel, 0, 0);     controlsLayout->addWidget(maximumLabel, 1, 0);     controlsLayout->addWidget(valueLabel, 2, 0);     controlsLayout->addWidget(minimumSpinBox, 0, 1);     controlsLayout->addWidget(maximumSpinBox, 1, 1);     controlsLayout->addWidget(valueSpinBox, 2, 1);     controlsLayout->addWidget(invertedAppearance, 0, 2);     controlsLayout->addWidget(invertedKeyBindings, 1, 2);     controlsLayout->addWidget(orientationCombo, 3, 0, 1, 3);     controlsGroup->setLayout(controlsLayout); } #include <QApplication> #include "window.h" int main(int argc, char *argv[]) {     QApplication app(argc, argv);     Window window;     window.show();     return app.exec(); }