作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在 QSlider 增加或减少时触发一个不同的信号。不幸的是,由于我在我的控制之外创建的程序的限制,我无法跟踪 slider 的值,只能进行比较。
有办法吗?
最佳答案
如果我没理解错的话,您不能使用 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)), ...);
关于qt - 有没有办法在 QSlider 值增加时生成信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13769836/
我是一名优秀的程序员,十分优秀!