我试图触发来自 QSlider 的不同信号,以了解它何时增加或减少。不幸的是,由于我在我的控制之外创建的程序的限制,我无法跟踪滑块的值而只是进行比较。
有没有办法做到这一点?
我试图触发来自 QSlider 的不同信号,以了解它何时增加或减少。不幸的是,由于我在我的控制之外创建的程序的限制,我无法跟踪滑块的值而只是进行比较。
有没有办法做到这一点?
如果我对您的理解正确,则您无法valueChanged(int)
确定该值是增加还是减少,因为您无法跟踪该值。但是,您需要这样做,因为 QSlider 没有用于增加/减少值的不同信号。
使用此帮助程序类来跟踪当前值。它将提供的目标对象的信号重新映射valueChanged(int)
到新信号valueIncreased(int)
并valueDecreased(int)
告诉(绝对)差异。
class ValueChangeTracker : public QObject
{
Q_OBJECT
int v;
public:
ValueChangeTracker(QObject *target) :
QObject(target)
{
connect(target, SIGNAL(valueChanged(int)), SLOT(changed(int)));
v = target->property("value"); // or ->value() if you specifically use QSlider* instead of QObject* as the target type
}
signals:
void valueIncreased(int);
void valueDecreased(int);
private slots:
void changed(int newValue) {
int diff = newValue - v;
v = newValue;
if(diff > 0) emit valueIncreased(diff);
if(diff < 0) emit valueDecreased(-diff);
}
};
要使用它,只需创建这个类的一个新实例并连接到它的信号。在 QObject 树中,它成为目标对象的子对象,因此您不必保留指向实例的指针。
QSlider *mySlider = ...
ValueChangeTracker *tracker = new ValueChangeTracker(mySlider);
connect(tracker, SIGNAL(valueIncreased(int)), ...);
connect(tracker, SIGNAL(valueDecreased(int)), ...);
QSlider
发出信号valueChanged
,只需将其连接到插槽:
mySlider.valueChanged.connect(self.on_mySlider_valueChanged)
如果您愿意,可以在那里进行测试并发出自定义信号。
我不完全理解这个问题,也许举个例子会有所帮助。但是,如果您查看QSlidervalueChanged(int)
的文档,它会在滑块的值更改时发出信号。