├── .gitignore ├── demo.gif ├── main.cpp ├── mainwindow.h ├── README.md ├── LICENSE ├── RangeSlider.pro ├── mainwindow.cpp ├── RangeSlider.h ├── RangeSlider.cpp └── RangeSlider.pro.user /.gitignore: -------------------------------------------------------------------------------- 1 | *pro.user 2 | *autosave 3 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThisIsClark/Qt-RangeSlider/HEAD/demo.gif -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | #include "mainwindow.h" 2 | #include 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | QApplication a(argc, argv); 7 | MainWindow w; 8 | w.show(); 9 | 10 | return a.exec(); 11 | } 12 | -------------------------------------------------------------------------------- /mainwindow.h: -------------------------------------------------------------------------------- 1 | #ifndef MAINWINDOW_H 2 | #define MAINWINDOW_H 3 | 4 | #include 5 | #include 6 | #include "RangeSlider.h" 7 | 8 | namespace Ui { 9 | class MainWindow; 10 | } 11 | 12 | class MainWindow : public QMainWindow 13 | { 14 | Q_OBJECT 15 | 16 | public: 17 | explicit MainWindow(QWidget *parent = nullptr); 18 | ~MainWindow(); 19 | 20 | private: 21 | Ui::MainWindow *ui; 22 | QWidget *widget; 23 | RangeSlider *rsH, *rsV, *rsHsingleLeft, *rsVsingleLeft, *rsHsingleRight, *rsVsingleRight; 24 | QHBoxLayout *layout; 25 | }; 26 | 27 | #endif // MAINWINDOW_H 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Qt-RangeSlider 2 | Implement range slider in Qt
3 | Here is the demo:
4 | ![image](https://github.com/nasafix-nasser/Qt-RangeSlider/blob/multi-type-slider/demo.gif)
5 | ## How to use 6 | 1. Import RangeSlider.cpp & RangeSlider.h to your project. 7 | 2. Add a widget in Qt Designer. 8 | 3. Right click this widget to promote it to RangeSlider. 9 | 4. Now you can use this RangeSlider in your code. 10 | ## ❤ Enjoying this project? 11 | If this tool saves you time or makes your work easier, consider supporting its development. Scan the QR code below to buy me a coffee! Your encouragement keeps this project alive and updated. 12 | 13 | ![receive](https://github.com/user-attachments/assets/ddb88a71-3c58-46f3-a3eb-f0fa3eca33ca) 14 | 15 | Thank you for using *RangeSlider* — whether you sponsor or not! 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 ThisIsClark 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /RangeSlider.pro: -------------------------------------------------------------------------------- 1 | #------------------------------------------------- 2 | # 3 | # Project created by QtCreator 2018-03-04T22:47:49 4 | # 5 | #------------------------------------------------- 6 | 7 | QT += core gui 8 | 9 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 10 | 11 | TARGET = RangeSlider 12 | TEMPLATE = app 13 | 14 | # The following define makes your compiler emit warnings if you use 15 | # any feature of Qt which as been marked as deprecated (the exact warnings 16 | # depend on your compiler). Please consult the documentation of the 17 | # deprecated API in order to know how to port your code away from it. 18 | DEFINES += QT_DEPRECATED_WARNINGS 19 | 20 | # You can also make your code fail to compile if you use deprecated APIs. 21 | # In order to do so, uncomment the following line. 22 | # You can also select to disable deprecated APIs only up to a certain version of Qt. 23 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 24 | 25 | QMAKE_CXXFLAGS += -std=gnu++11 26 | 27 | SOURCES += main.cpp\ 28 | mainwindow.cpp \ 29 | RangeSlider.cpp 30 | 31 | HEADERS += mainwindow.h \ 32 | RangeSlider.h 33 | 34 | FORMS += 35 | -------------------------------------------------------------------------------- /mainwindow.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "mainwindow.h" 3 | 4 | MainWindow::MainWindow(QWidget *parent) : 5 | QMainWindow(parent) 6 | { 7 | widget = new QWidget(this); 8 | rsH = new RangeSlider(Qt::Horizontal, RangeSlider::Option::DoubleHandles, nullptr); 9 | rsV = new RangeSlider(Qt::Vertical, RangeSlider::Option::DoubleHandles, nullptr); 10 | rsHsingleLeft = new RangeSlider(Qt::Horizontal, RangeSlider::Option::LeftHandle, nullptr); 11 | rsVsingleLeft = new RangeSlider(Qt::Vertical, RangeSlider::Option::LeftHandle, nullptr); 12 | rsHsingleRight = new RangeSlider(Qt::Horizontal, RangeSlider::Option::RightHandle, nullptr); 13 | rsVsingleRight = new RangeSlider(Qt::Vertical, RangeSlider::Option::RightHandle, nullptr); 14 | 15 | layout = new QHBoxLayout(); 16 | layout->addWidget(rsH); 17 | layout->addWidget(rsV); 18 | layout->addWidget(rsHsingleLeft); 19 | layout->addWidget(rsVsingleLeft); 20 | layout->addWidget(rsHsingleRight); 21 | layout->addWidget(rsVsingleRight); 22 | 23 | widget->setLayout(layout); 24 | setCentralWidget(widget); 25 | resize(QDesktopWidget().availableGeometry(this).size() * 0.7); 26 | } 27 | 28 | MainWindow::~MainWindow() 29 | { 30 | } 31 | -------------------------------------------------------------------------------- /RangeSlider.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | class RangeSlider : public QWidget 8 | { 9 | Q_OBJECT 10 | Q_ENUMS(RangeSliderTypes) 11 | 12 | public: 13 | enum Option { 14 | NoHandle = 0x0, 15 | LeftHandle = 0x1, 16 | RightHandle = 0x2, 17 | DoubleHandles = LeftHandle | RightHandle 18 | }; 19 | Q_DECLARE_FLAGS(Options, Option) 20 | 21 | RangeSlider( QWidget* aParent = Q_NULLPTR); 22 | RangeSlider( Qt::Orientation ori, Options t = DoubleHandles, QWidget* aParent = Q_NULLPTR); 23 | 24 | QSize minimumSizeHint() const override; 25 | 26 | int GetMinimun() const; 27 | void SetMinimum(int aMinimum); 28 | 29 | int GetMaximun() const; 30 | void SetMaximum(int aMaximum); 31 | 32 | int GetLowerValue() const; 33 | void SetLowerValue(int aLowerValue); 34 | 35 | int GetUpperValue() const; 36 | void SetUpperValue(int aUpperValue); 37 | 38 | void SetRange(int aMinimum, int aMaximum); 39 | 40 | protected: 41 | void paintEvent(QPaintEvent* aEvent) override; 42 | void mousePressEvent(QMouseEvent* aEvent) override; 43 | void mouseMoveEvent(QMouseEvent* aEvent) override; 44 | void mouseReleaseEvent(QMouseEvent* aEvent) override; 45 | void changeEvent(QEvent* aEvent) override; 46 | 47 | QRectF firstHandleRect() const; 48 | QRectF secondHandleRect() const; 49 | QRectF handleRect(int aValue) const; 50 | 51 | signals: 52 | void lowerValueChanged(int aLowerValue); 53 | void upperValueChanged(int aUpperValue); 54 | void rangeChanged(int aMin, int aMax); 55 | 56 | public slots: 57 | void setLowerValue(int aLowerValue); 58 | void setUpperValue(int aUpperValue); 59 | void setMinimum(int aMinimum); 60 | void setMaximum(int aMaximum); 61 | 62 | private: 63 | Q_DISABLE_COPY(RangeSlider) 64 | float currentPercentage(); 65 | int validLength() const; 66 | 67 | int mMinimum; 68 | int mMaximum; 69 | int mLowerValue; 70 | int mUpperValue; 71 | bool mFirstHandlePressed; 72 | bool mSecondHandlePressed; 73 | int mInterval; 74 | int mDelta; 75 | QColor mBackgroudColorEnabled; 76 | QColor mBackgroudColorDisabled; 77 | QColor mBackgroudColor; 78 | Qt::Orientation orientation; 79 | Options type; 80 | }; 81 | 82 | Q_DECLARE_OPERATORS_FOR_FLAGS(RangeSlider::Options) 83 | -------------------------------------------------------------------------------- /RangeSlider.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "RangeSlider.h" 3 | #include 4 | 5 | namespace 6 | { 7 | 8 | const int scHandleSideLength = 11; 9 | const int scSliderBarHeight = 5; 10 | const int scLeftRightMargin = 1; 11 | 12 | } 13 | 14 | RangeSlider::RangeSlider(QWidget* aParent) 15 | : QWidget(aParent), 16 | mMinimum(0), 17 | mMaximum(100), 18 | mLowerValue(0), 19 | mUpperValue(100), 20 | mFirstHandlePressed(false), 21 | mSecondHandlePressed(false), 22 | mInterval(mMaximum - mMinimum), 23 | mBackgroudColorEnabled(QColor(0x1E, 0x90, 0xFF)), 24 | mBackgroudColorDisabled(Qt::darkGray), 25 | mBackgroudColor(mBackgroudColorEnabled), 26 | orientation(Qt::Horizontal) 27 | { 28 | setMouseTracking(true); 29 | } 30 | 31 | RangeSlider::RangeSlider(Qt::Orientation ori, Options t, QWidget* aParent) 32 | : QWidget(aParent), 33 | mMinimum(0), 34 | mMaximum(100), 35 | mLowerValue(0), 36 | mUpperValue(100), 37 | mFirstHandlePressed(false), 38 | mSecondHandlePressed(false), 39 | mInterval(mMaximum - mMinimum), 40 | mBackgroudColorEnabled(QColor(0x1E, 0x90, 0xFF)), 41 | mBackgroudColorDisabled(Qt::darkGray), 42 | mBackgroudColor(mBackgroudColorEnabled), 43 | orientation(ori), 44 | type(t) 45 | { 46 | setMouseTracking(true); 47 | } 48 | 49 | void RangeSlider::paintEvent(QPaintEvent* aEvent) 50 | { 51 | Q_UNUSED(aEvent); 52 | QPainter painter(this); 53 | 54 | // Background 55 | QRectF backgroundRect; 56 | if(orientation == Qt::Horizontal) 57 | backgroundRect = QRectF(scLeftRightMargin, (height() - scSliderBarHeight) / 2, width() - scLeftRightMargin * 2, scSliderBarHeight); 58 | else 59 | backgroundRect = QRectF((width() - scSliderBarHeight) / 2, scLeftRightMargin, scSliderBarHeight, height() - scLeftRightMargin*2); 60 | 61 | QPen pen(Qt::gray, 0.8); 62 | painter.setPen(pen); 63 | painter.setRenderHint(QPainter::Qt4CompatiblePainting); 64 | QBrush backgroundBrush(QColor(0xD0, 0xD0, 0xD0)); 65 | painter.setBrush(backgroundBrush); 66 | painter.drawRoundedRect(backgroundRect, 1, 1); 67 | 68 | // First value handle rect 69 | pen.setColor(Qt::darkGray); 70 | pen.setWidth(0.5); 71 | painter.setPen(pen); 72 | painter.setRenderHint(QPainter::Antialiasing); 73 | QBrush handleBrush(QColor(0xFA, 0xFA, 0xFA)); 74 | painter.setBrush(handleBrush); 75 | QRectF leftHandleRect = firstHandleRect(); 76 | if(type.testFlag(LeftHandle)) 77 | painter.drawRoundedRect(leftHandleRect, 2, 2); 78 | 79 | // Second value handle rect 80 | QRectF rightHandleRect = secondHandleRect(); 81 | if(type.testFlag(RightHandle)) 82 | painter.drawRoundedRect(rightHandleRect, 2, 2); 83 | 84 | // Handles 85 | painter.setRenderHint(QPainter::Antialiasing, false); 86 | QRectF selectedRect(backgroundRect); 87 | if(orientation == Qt::Horizontal) { 88 | selectedRect.setLeft((type.testFlag(LeftHandle) ? leftHandleRect.right() : leftHandleRect.left()) + 0.5); 89 | selectedRect.setRight((type.testFlag(RightHandle) ? rightHandleRect.left() : rightHandleRect.right()) - 0.5); 90 | } else { 91 | selectedRect.setTop((type.testFlag(LeftHandle) ? leftHandleRect.bottom() : leftHandleRect.top()) + 0.5); 92 | selectedRect.setBottom((type.testFlag(RightHandle) ? rightHandleRect.top() : rightHandleRect.bottom()) - 0.5); 93 | } 94 | QBrush selectedBrush(mBackgroudColor); 95 | painter.setBrush(selectedBrush); 96 | painter.drawRect(selectedRect); 97 | } 98 | 99 | QRectF RangeSlider::firstHandleRect() const 100 | { 101 | float percentage = (mLowerValue - mMinimum) * 1.0 / mInterval; 102 | return handleRect(percentage * validLength() + scLeftRightMargin); 103 | } 104 | 105 | QRectF RangeSlider::secondHandleRect() const 106 | { 107 | float percentage = (mUpperValue - mMinimum) * 1.0 / mInterval; 108 | return handleRect(percentage * validLength() + scLeftRightMargin + (type.testFlag(LeftHandle) ? scHandleSideLength : 0)); 109 | } 110 | 111 | QRectF RangeSlider::handleRect(int aValue) const 112 | { 113 | if(orientation == Qt::Horizontal) 114 | return QRect(aValue, (height()-scHandleSideLength) / 2, scHandleSideLength, scHandleSideLength); 115 | else 116 | return QRect((width()-scHandleSideLength) / 2, aValue, scHandleSideLength, scHandleSideLength); 117 | } 118 | 119 | void RangeSlider::mousePressEvent(QMouseEvent* aEvent) 120 | { 121 | if(aEvent->buttons() & Qt::LeftButton) 122 | { 123 | int posCheck, posMax, posValue, firstHandleRectPosValue, secondHandleRectPosValue; 124 | posCheck = (orientation == Qt::Horizontal) ? aEvent->pos().y() : aEvent->pos().x(); 125 | posMax = (orientation == Qt::Horizontal) ? height() : width(); 126 | posValue = (orientation == Qt::Horizontal) ? aEvent->pos().x() : aEvent->pos().y(); 127 | firstHandleRectPosValue = (orientation == Qt::Horizontal) ? firstHandleRect().x() : firstHandleRect().y(); 128 | secondHandleRectPosValue = (orientation == Qt::Horizontal) ? secondHandleRect().x() : secondHandleRect().y(); 129 | 130 | mSecondHandlePressed = secondHandleRect().contains(aEvent->pos()); 131 | mFirstHandlePressed = !mSecondHandlePressed && firstHandleRect().contains(aEvent->pos()); 132 | if(mFirstHandlePressed) 133 | { 134 | mDelta = posValue - (firstHandleRectPosValue + scHandleSideLength / 2); 135 | } 136 | else if(mSecondHandlePressed) 137 | { 138 | mDelta = posValue - (secondHandleRectPosValue + scHandleSideLength / 2); 139 | } 140 | 141 | if(posCheck >= 2 142 | && posCheck <= posMax - 2) 143 | { 144 | int step = mInterval / 10 < 1 ? 1 : mInterval / 10; 145 | if(posValue < firstHandleRectPosValue) 146 | setLowerValue(mLowerValue - step); 147 | else if(((posValue > firstHandleRectPosValue + scHandleSideLength) || !type.testFlag(LeftHandle)) 148 | && ((posValue < secondHandleRectPosValue) || !type.testFlag(RightHandle))) 149 | { 150 | if(type.testFlag(DoubleHandles)) 151 | if(posValue - (firstHandleRectPosValue + scHandleSideLength) < 152 | (secondHandleRectPosValue - (firstHandleRectPosValue + scHandleSideLength)) / 2) 153 | setLowerValue((mLowerValue + step < mUpperValue) ? mLowerValue + step : mUpperValue); 154 | else 155 | setUpperValue((mUpperValue - step > mLowerValue) ? mUpperValue - step : mLowerValue); 156 | else if(type.testFlag(LeftHandle)) 157 | setLowerValue((mLowerValue + step < mUpperValue) ? mLowerValue + step : mUpperValue); 158 | else if(type.testFlag(RightHandle)) 159 | setUpperValue((mUpperValue - step > mLowerValue) ? mUpperValue - step : mLowerValue); 160 | } 161 | else if(posValue > secondHandleRectPosValue + scHandleSideLength) 162 | setUpperValue(mUpperValue + step); 163 | } 164 | } 165 | } 166 | 167 | void RangeSlider::mouseMoveEvent(QMouseEvent* aEvent) 168 | { 169 | if(aEvent->buttons() & Qt::LeftButton) 170 | { 171 | int posValue, firstHandleRectPosValue, secondHandleRectPosValue; 172 | posValue = (orientation == Qt::Horizontal) ? aEvent->pos().x() : aEvent->pos().y(); 173 | firstHandleRectPosValue = (orientation == Qt::Horizontal) ? firstHandleRect().x() : firstHandleRect().y(); 174 | secondHandleRectPosValue = (orientation == Qt::Horizontal) ? secondHandleRect().x() : secondHandleRect().y(); 175 | 176 | if(mFirstHandlePressed && type.testFlag(LeftHandle)) 177 | { 178 | if(posValue - mDelta + scHandleSideLength / 2 <= secondHandleRectPosValue) 179 | { 180 | setLowerValue((posValue - mDelta - scLeftRightMargin - scHandleSideLength / 2) * 1.0 / validLength() * mInterval + mMinimum); 181 | } 182 | else 183 | { 184 | setLowerValue(mUpperValue); 185 | } 186 | } 187 | else if(mSecondHandlePressed && type.testFlag(RightHandle)) 188 | { 189 | if(firstHandleRectPosValue + scHandleSideLength * (type.testFlag(DoubleHandles) ? 1.5 : 0.5) <= posValue - mDelta) 190 | { 191 | setUpperValue((posValue - mDelta - scLeftRightMargin - scHandleSideLength / 2 - (type.testFlag(DoubleHandles) ? scHandleSideLength : 0)) * 1.0 / validLength() * mInterval + mMinimum); 192 | } 193 | else 194 | { 195 | setUpperValue(mLowerValue); 196 | } 197 | } 198 | } 199 | } 200 | 201 | void RangeSlider::mouseReleaseEvent(QMouseEvent* aEvent) 202 | { 203 | Q_UNUSED(aEvent); 204 | 205 | mFirstHandlePressed = false; 206 | mSecondHandlePressed = false; 207 | } 208 | 209 | void RangeSlider::changeEvent(QEvent* aEvent) 210 | { 211 | if(aEvent->type() == QEvent::EnabledChange) 212 | { 213 | if(isEnabled()) 214 | { 215 | mBackgroudColor = mBackgroudColorEnabled; 216 | } 217 | else 218 | { 219 | mBackgroudColor = mBackgroudColorDisabled; 220 | } 221 | update(); 222 | } 223 | } 224 | 225 | QSize RangeSlider::minimumSizeHint() const 226 | { 227 | return QSize(scHandleSideLength * 2 + scLeftRightMargin * 2, scHandleSideLength); 228 | } 229 | 230 | int RangeSlider::GetMinimun() const 231 | { 232 | return mMinimum; 233 | } 234 | 235 | void RangeSlider::SetMinimum(int aMinimum) 236 | { 237 | setMinimum(aMinimum); 238 | } 239 | 240 | int RangeSlider::GetMaximun() const 241 | { 242 | return mMaximum; 243 | } 244 | 245 | void RangeSlider::SetMaximum(int aMaximum) 246 | { 247 | setMaximum(aMaximum); 248 | } 249 | 250 | int RangeSlider::GetLowerValue() const 251 | { 252 | return mLowerValue; 253 | } 254 | 255 | void RangeSlider::SetLowerValue(int aLowerValue) 256 | { 257 | setLowerValue(aLowerValue); 258 | } 259 | 260 | int RangeSlider::GetUpperValue() const 261 | { 262 | return mUpperValue; 263 | } 264 | 265 | void RangeSlider::SetUpperValue(int aUpperValue) 266 | { 267 | setUpperValue(aUpperValue); 268 | } 269 | 270 | void RangeSlider::setLowerValue(int aLowerValue) 271 | { 272 | if(aLowerValue > mMaximum) 273 | { 274 | aLowerValue = mMaximum; 275 | } 276 | 277 | if(aLowerValue < mMinimum) 278 | { 279 | aLowerValue = mMinimum; 280 | } 281 | 282 | mLowerValue = aLowerValue; 283 | emit lowerValueChanged(mLowerValue); 284 | 285 | update(); 286 | } 287 | 288 | void RangeSlider::setUpperValue(int aUpperValue) 289 | { 290 | if(aUpperValue > mMaximum) 291 | { 292 | aUpperValue = mMaximum; 293 | } 294 | 295 | if(aUpperValue < mMinimum) 296 | { 297 | aUpperValue = mMinimum; 298 | } 299 | 300 | mUpperValue = aUpperValue; 301 | emit upperValueChanged(mUpperValue); 302 | 303 | update(); 304 | } 305 | 306 | void RangeSlider::setMinimum(int aMinimum) 307 | { 308 | if(aMinimum <= mMaximum) 309 | { 310 | mMinimum = aMinimum; 311 | } 312 | else 313 | { 314 | int oldMax = mMaximum; 315 | mMinimum = oldMax; 316 | mMaximum = aMinimum; 317 | } 318 | mInterval = mMaximum - mMinimum; 319 | update(); 320 | 321 | setLowerValue(mMinimum); 322 | setUpperValue(mMaximum); 323 | 324 | emit rangeChanged(mMinimum, mMaximum); 325 | } 326 | 327 | void RangeSlider::setMaximum(int aMaximum) 328 | { 329 | if(aMaximum >= mMinimum) 330 | { 331 | mMaximum = aMaximum; 332 | } 333 | else 334 | { 335 | int oldMin = mMinimum; 336 | mMaximum = oldMin; 337 | mMinimum = aMaximum; 338 | } 339 | mInterval = mMaximum - mMinimum; 340 | update(); 341 | 342 | setLowerValue(mMinimum); 343 | setUpperValue(mMaximum); 344 | 345 | emit rangeChanged(mMinimum, mMaximum); 346 | } 347 | 348 | int RangeSlider::validLength() const 349 | { 350 | int len = (orientation == Qt::Horizontal) ? width() : height(); 351 | return len - scLeftRightMargin * 2 - scHandleSideLength * (type.testFlag(DoubleHandles) ? 2 : 1); 352 | } 353 | 354 | void RangeSlider::SetRange(int aMinimum, int mMaximum) 355 | { 356 | setMinimum(aMinimum); 357 | setMaximum(mMaximum); 358 | } 359 | -------------------------------------------------------------------------------- /RangeSlider.pro.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | EnvironmentId 7 | {56e8bcaf-837a-412d-a8f5-04ab0a7f29eb} 8 | 9 | 10 | ProjectExplorer.Project.ActiveTarget 11 | 0 12 | 13 | 14 | ProjectExplorer.Project.EditorSettings 15 | 16 | true 17 | false 18 | true 19 | 20 | Cpp 21 | 22 | CppGlobal 23 | 24 | 25 | 26 | QmlJS 27 | 28 | QmlJSGlobal 29 | 30 | 31 | 2 32 | UTF-8 33 | false 34 | 4 35 | false 36 | 80 37 | true 38 | true 39 | 1 40 | true 41 | false 42 | 0 43 | true 44 | true 45 | 0 46 | 8 47 | true 48 | 1 49 | true 50 | true 51 | true 52 | false 53 | 54 | 55 | 56 | ProjectExplorer.Project.PluginSettings 57 | 58 | 59 | 60 | ProjectExplorer.Project.Target.0 61 | 62 | Desktop Qt 5.8.0 GCC 64bit 63 | Desktop Qt 5.8.0 GCC 64bit 64 | qt.58.gcc_64_kit 65 | 0 66 | 0 67 | 0 68 | 69 | /home/user/Documents/0304/RangeSlider/build-RangeSlider-Desktop_Qt_5_8_0_GCC_64bit-Debug 70 | 71 | 72 | true 73 | qmake 74 | 75 | QtProjectManager.QMakeBuildStep 76 | true 77 | 78 | false 79 | false 80 | false 81 | 82 | 83 | true 84 | Make 85 | 86 | Qt4ProjectManager.MakeStep 87 | 88 | -w 89 | -r 90 | 91 | false 92 | 93 | 94 | 95 | 2 96 | Build 97 | 98 | ProjectExplorer.BuildSteps.Build 99 | 100 | 101 | 102 | true 103 | Make 104 | 105 | Qt4ProjectManager.MakeStep 106 | 107 | -w 108 | -r 109 | 110 | true 111 | clean 112 | 113 | 114 | 1 115 | Clean 116 | 117 | ProjectExplorer.BuildSteps.Clean 118 | 119 | 2 120 | false 121 | 122 | Debug 123 | 124 | Qt4ProjectManager.Qt4BuildConfiguration 125 | 2 126 | true 127 | 128 | 129 | /home/user/Documents/0304/RangeSlider/build-RangeSlider-Desktop_Qt_5_8_0_GCC_64bit-Release 130 | 131 | 132 | true 133 | qmake 134 | 135 | QtProjectManager.QMakeBuildStep 136 | false 137 | 138 | false 139 | false 140 | false 141 | 142 | 143 | true 144 | Make 145 | 146 | Qt4ProjectManager.MakeStep 147 | 148 | -w 149 | -r 150 | 151 | false 152 | 153 | 154 | 155 | 2 156 | Build 157 | 158 | ProjectExplorer.BuildSteps.Build 159 | 160 | 161 | 162 | true 163 | Make 164 | 165 | Qt4ProjectManager.MakeStep 166 | 167 | -w 168 | -r 169 | 170 | true 171 | clean 172 | 173 | 174 | 1 175 | Clean 176 | 177 | ProjectExplorer.BuildSteps.Clean 178 | 179 | 2 180 | false 181 | 182 | Release 183 | 184 | Qt4ProjectManager.Qt4BuildConfiguration 185 | 0 186 | true 187 | 188 | 189 | /home/user/Documents/0304/RangeSlider/build-RangeSlider-Desktop_Qt_5_8_0_GCC_64bit-Profile 190 | 191 | 192 | true 193 | qmake 194 | 195 | QtProjectManager.QMakeBuildStep 196 | true 197 | 198 | false 199 | true 200 | false 201 | 202 | 203 | true 204 | Make 205 | 206 | Qt4ProjectManager.MakeStep 207 | 208 | -w 209 | -r 210 | 211 | false 212 | 213 | 214 | 215 | 2 216 | Build 217 | 218 | ProjectExplorer.BuildSteps.Build 219 | 220 | 221 | 222 | true 223 | Make 224 | 225 | Qt4ProjectManager.MakeStep 226 | 227 | -w 228 | -r 229 | 230 | true 231 | clean 232 | 233 | 234 | 1 235 | Clean 236 | 237 | ProjectExplorer.BuildSteps.Clean 238 | 239 | 2 240 | false 241 | 242 | Profile 243 | 244 | Qt4ProjectManager.Qt4BuildConfiguration 245 | 0 246 | true 247 | 248 | 3 249 | 250 | 251 | 0 252 | Deploy 253 | 254 | ProjectExplorer.BuildSteps.Deploy 255 | 256 | 1 257 | Deploy locally 258 | 259 | ProjectExplorer.DefaultDeployConfiguration 260 | 261 | 1 262 | 263 | 264 | false 265 | false 266 | 1000 267 | 268 | true 269 | 270 | false 271 | false 272 | false 273 | false 274 | true 275 | 0.01 276 | 10 277 | true 278 | 1 279 | 25 280 | 281 | 1 282 | true 283 | false 284 | true 285 | valgrind 286 | 287 | 0 288 | 1 289 | 2 290 | 3 291 | 4 292 | 5 293 | 6 294 | 7 295 | 8 296 | 9 297 | 10 298 | 11 299 | 12 300 | 13 301 | 14 302 | 303 | 2 304 | 305 | RangeSlider 306 | RangeSlider2 307 | Qt4ProjectManager.Qt4RunConfiguration:/home/user/Documents/0304/RangeSlider/RangeSlider.pro 308 | true 309 | 310 | RangeSlider.pro 311 | false 312 | 313 | /home/user/Documents/0304/RangeSlider/build-RangeSlider-Desktop_Qt_5_8_0_GCC_64bit-Debug 314 | 3768 315 | false 316 | true 317 | false 318 | false 319 | true 320 | 321 | 1 322 | 323 | 324 | 325 | ProjectExplorer.Project.Target.1 326 | 327 | Desktop 328 | Desktop 329 | {05f4352d-bc2c-40fe-aff1-3300eb0eaff6} 330 | 0 331 | 0 332 | 0 333 | 334 | /home/user/Documents/0304/RangeSlider/build-RangeSlider-Desktop-Debug 335 | 336 | 337 | true 338 | qmake 339 | 340 | QtProjectManager.QMakeBuildStep 341 | true 342 | 343 | false 344 | false 345 | false 346 | 347 | 348 | true 349 | Make 350 | 351 | Qt4ProjectManager.MakeStep 352 | 353 | -w 354 | -r 355 | 356 | false 357 | 358 | 359 | 360 | 2 361 | Build 362 | 363 | ProjectExplorer.BuildSteps.Build 364 | 365 | 366 | 367 | true 368 | Make 369 | 370 | Qt4ProjectManager.MakeStep 371 | 372 | -w 373 | -r 374 | 375 | true 376 | clean 377 | 378 | 379 | 1 380 | Clean 381 | 382 | ProjectExplorer.BuildSteps.Clean 383 | 384 | 2 385 | false 386 | 387 | Debug 388 | 389 | Qt4ProjectManager.Qt4BuildConfiguration 390 | 2 391 | true 392 | 393 | 394 | /home/user/Documents/0304/RangeSlider/build-RangeSlider-Desktop-Release 395 | 396 | 397 | true 398 | qmake 399 | 400 | QtProjectManager.QMakeBuildStep 401 | false 402 | 403 | false 404 | false 405 | false 406 | 407 | 408 | true 409 | Make 410 | 411 | Qt4ProjectManager.MakeStep 412 | 413 | -w 414 | -r 415 | 416 | false 417 | 418 | 419 | 420 | 2 421 | Build 422 | 423 | ProjectExplorer.BuildSteps.Build 424 | 425 | 426 | 427 | true 428 | Make 429 | 430 | Qt4ProjectManager.MakeStep 431 | 432 | -w 433 | -r 434 | 435 | true 436 | clean 437 | 438 | 439 | 1 440 | Clean 441 | 442 | ProjectExplorer.BuildSteps.Clean 443 | 444 | 2 445 | false 446 | 447 | Release 448 | 449 | Qt4ProjectManager.Qt4BuildConfiguration 450 | 0 451 | true 452 | 453 | 454 | /home/user/Documents/0304/RangeSlider/build-RangeSlider-Desktop-Profile 455 | 456 | 457 | true 458 | qmake 459 | 460 | QtProjectManager.QMakeBuildStep 461 | true 462 | 463 | false 464 | true 465 | false 466 | 467 | 468 | true 469 | Make 470 | 471 | Qt4ProjectManager.MakeStep 472 | 473 | -w 474 | -r 475 | 476 | false 477 | 478 | 479 | 480 | 2 481 | Build 482 | 483 | ProjectExplorer.BuildSteps.Build 484 | 485 | 486 | 487 | true 488 | Make 489 | 490 | Qt4ProjectManager.MakeStep 491 | 492 | -w 493 | -r 494 | 495 | true 496 | clean 497 | 498 | 499 | 1 500 | Clean 501 | 502 | ProjectExplorer.BuildSteps.Clean 503 | 504 | 2 505 | false 506 | 507 | Profile 508 | 509 | Qt4ProjectManager.Qt4BuildConfiguration 510 | 0 511 | true 512 | 513 | 3 514 | 515 | 516 | 0 517 | Deploy 518 | 519 | ProjectExplorer.BuildSteps.Deploy 520 | 521 | 1 522 | Deploy locally 523 | 524 | ProjectExplorer.DefaultDeployConfiguration 525 | 526 | 1 527 | 528 | 529 | false 530 | false 531 | 1000 532 | 533 | true 534 | 535 | false 536 | false 537 | false 538 | false 539 | true 540 | 0.01 541 | 10 542 | true 543 | 1 544 | 25 545 | 546 | 1 547 | true 548 | false 549 | true 550 | valgrind 551 | 552 | 0 553 | 1 554 | 2 555 | 3 556 | 4 557 | 5 558 | 6 559 | 7 560 | 8 561 | 9 562 | 10 563 | 11 564 | 12 565 | 13 566 | 14 567 | 568 | -1 569 | 570 | 571 | 572 | %{buildDir} 573 | Custom Executable 574 | 575 | ProjectExplorer.CustomExecutableRunConfiguration 576 | 3768 577 | false 578 | true 579 | false 580 | false 581 | true 582 | 583 | 1 584 | 585 | 586 | 587 | ProjectExplorer.Project.TargetCount 588 | 2 589 | 590 | 591 | ProjectExplorer.Project.Updater.FileVersion 592 | 18 593 | 594 | 595 | Version 596 | 18 597 | 598 | 599 | --------------------------------------------------------------------------------