我正在使用qt库写一个代码,我需要在它变化之前获取一个旋转框的值(通过信号)。
我有:
QSpinBox spinBoxWidth:
QSpinBox spinBoxScale;
我想将一个来自spinBoxWidth的信号连接到spinBoxScale,这样SpinBoxScale的值总是“更改后的SpinBoxWidth的值”变为“更改前的值”。
(Scale = width_new / width_old)
我没有在Qt中找到任何插槽,它在更改值时返回旋转框的旧值。我可以以某种方式为此写一个插槽吗?
最好的问候
答案 0 :(得分:2)
有两种方法可以做到这一点:
QKeyEvent
,QMouseEvent
)存储旧值。这很容易出错,因为spinBoxWidth
的值可以手动设置。spinBoxWidth
的{{1}}信号连接到一个广告位,并引用它所调用的最后一个值。我推荐这种方法。尝试这样的事情:
valueChanged(int)
连接信号后,流程应如下所示:
class MonitoringObject : public QObject
{
Q_OBJECT
int lastValue;
int currentValue;
...
public Q_SLOTS:
void onValueChanged(int newVal)
{
lastValue = currentValue;
currentValue = newVal;
if (lastValue == 0) //catch divide-by-zero
emit ratioChanged(0);
else
emit ratioChanged(currentValue/lastValue);
}
Q_SIGNALS:
void ratioChanged(int);
发出spinBoxWidth
valueChanged(int)
已被调用,其工作并发出MonitoringObject::onValueChanged(int)
ratioChanged(int)
在spinBoxScale
广告位中接收信号并设置相应的值。答案 1 :(得分:0)
我相信在更改之前没有特定的信号值"因为你可以随时存储它来自前一个信号" onValueChanged()"你收到。
所以基本的想法是:
您可以派生自己的QSpinBox版本,包括此代码,或者在必须接收信号的类中实现。这取决于你的架构。