ich hatte genau das gleiche problem. Ich dachte über die Verwendung der QxtSpanSlider, und zwar haben Sie schönen code, Sie nicht halten Sie Ihren code bis zu Datum nicht mehr. Also entschied ich mich zu meinem eigenen zu machen. Ich habe nicht verbrachte viel Zeit auf dieser, so gibt es kludges und wahrscheinlich bugs. Es sollte jedoch an einem Punkt, wo Sie können kopieren/einfügen in Ihr Projekt. Ich hoffe, es wird zeigen Sie in die richtige Richtung.
*beachten Sie, bevor Sie verwenden, hier ist eine Liste aller Probleme, die ich gefunden habe und arbeite derzeit an:
Den zweiten Griff ist nicht annähernd so empfindlich wie der erste Griff, was leichte Unruhe für die Anwender.
Einige der Werte sind fest codiert und als ein Ergebnis der slider ist nicht so dynamisch wie es sein könnte.
Der zweite Griff nicht verarbeitet (haa...) negative Werte noch.
Hier eine gute Lösung:
SuperSlider.h
#pragma once
#include"qslider.h"#include"qlabel.h"/*
* Super sick nasty awesome double handled slider!
*
* @author Steve
*/classSuperSliderHandle;classSuperSlider:publicQSlider{
Q_OBJECT
public:/** Constructor */SuperSlider(QWidget*parent =0);/** Store the alternate handle for this slider*/SuperSliderHandle*alt_handle;/** Overridden mouse release event */void mouseReleaseEvent(QMouseEvent*event);/** Returns the slider value for the alternate handle */int alt_value();/** Convenience function for setting the value of the alternate handle */void alt_setValue(int value);/** Resets the alternate handle to the right side of the slider */voidReset();/** Used to update the position of the alternate handle through the use of an event filter */void alt_update();
signals:/** Constructor */void alt_valueChanged(int);};classSuperEventFilter:publicQObject{public:/** Constructor */SliderEventFilter(SuperSlider*_grandParent){grandParent = _grandParent;};protected:/*
* overloaded functions for object that inherit from this class
*/bool eventFilter(QObject* obj,QEvent* event);private:/** Store the SuperSlider that this event filter is used within. */SuperSlider*grandParent;};classSuperSliderHandle:publicQLabel{
Q_OBJECT
public:/** Constructor */SuperSliderHandle(SuperSlider*parent =0);/** An overloaded mousePressevent so that we can start grabbing the cursor and using it's position for the value */void mousePressEvent(QMouseEvent*event);/** Returns the value of this handle with respect to the slider */int value();/** Maps mouse coordinates to slider values */int mapValue();/** Store the parent as a slider so that you don't have to keep casting it */SuperSlider*parent;/** Store a bool to determine if the alternate handle has been activated */bool handleActivated;private:/** Store the filter for installation on the qguiapp */SliderEventFilter*filter;public slots:/** Sets the value of the handle with respect to the slider */void setValue(double value);};
ich hatte genau das gleiche problem. Ich dachte über die Verwendung der QxtSpanSlider, und zwar haben Sie schönen code, Sie nicht halten Sie Ihren code bis zu Datum nicht mehr. Also entschied ich mich zu meinem eigenen zu machen. Ich habe nicht verbrachte viel Zeit auf dieser, so gibt es kludges und wahrscheinlich bugs. Es sollte jedoch an einem Punkt, wo Sie können kopieren/einfügen in Ihr Projekt. Ich hoffe, es wird zeigen Sie in die richtige Richtung.*beachten Sie, bevor Sie verwenden, hier ist eine Liste aller Probleme, die ich gefunden habe und arbeite derzeit an:
Der zweite Griff nicht verarbeitet (haa...) negative Werte noch.Hier eine gute Lösung:
SuperSlider.h
SuperSlider.cpp
InformationsquelleAutor der Antwort AmusingTeebs