我试图在QSlider增加或减少时触发来自QSlider的独特信号。不幸的是由于程序中的限制,我在我的控制之外创建我无法跟踪滑块的值,只是做一个比较。
有办法做到这一点吗?
答案 0 :(得分:5)
如果我理解正确,您无法使用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)), ...);
答案 1 :(得分:0)
QSlider
发出信号valueChanged
,只需将其连接到插槽:
mySlider.valueChanged.connect(self.on_mySlider_valueChanged)
并在那里进行测试并根据需要发出自定义信号。
答案 2 :(得分:0)
我不完全理解这个问题,也许一个例子会有所帮助。但是,如果您查看QSlider的文档,当滑块的值发生更改时,它会发出信号valueChanged(int)
。