jon*_*opf 2 qt slider signals-slots
我试图从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);
}
};
Run Code Online (Sandbox Code Playgroud)
要使用它,只需创建此类的新实例并连接到其信号即可。在QObject树中,它成为目标对象的子代,因此您不必保留指向实例的指针。
QSlider *mySlider = ...
ValueChangeTracker *tracker = new ValueChangeTracker(mySlider);
connect(tracker, SIGNAL(valueIncreased(int)), ...);
connect(tracker, SIGNAL(valueDecreased(int)), ...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1120 次 |
| 最近记录: |