添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode . Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).

I'm not getting quite what I am expecting with QProperty bindings and onValueChanged(...)
It seems that if I am tracking a property (i.e. QProperty::onValueChanged(...)) which is bound
to another QProperty, and is also bound to by a third QProperty.

My original code is much bigger then this, but I was able to reproduce my issue with the
following code:

#include <QProperty>
#include <QDebug>
int main( int, char** )
   QProperty< bool > p{ true };
   QProperty< bool > pp{  [&](){ return p.value();  } };
   QProperty< bool > ppp{ [&](){ return pp.value(); } };
   auto ch1{ p.onValueChanged(   [&](){qDebug() << "p changed to:"   << p.value();   } ) };
   auto ch2{ pp.onValueChanged(  [&](){qDebug() << "pp changed to:"  << pp.value();  } ) };
   auto ch3{ ppp.onValueChanged( [&](){qDebug() << "ppp changed to:" << ppp.value(); } ) };
   qDebug() << p.value() << pp.value() << ppp.value();
   qDebug() << "\np.setValue( false );";
   p.setValue( false );
   qDebug() << p.value() << pp.value() << ppp.value();
   qDebug() << "\np.setValue( true );";
   p.setValue( true );
   qDebug() << p.value() << pp.value() << ppp.value();
   return 0;

The output I get is the following:

true true true
p.setValue( false );
ppp changed to: false
p changed to: false
false false false
p.setValue( true );
ppp changed to: true
p changed to: true
true true true

I.e. the value of all the QProperty objects are changing as expected, but
the lamda for pp.onValueChanged is not executed. I.e. I whould have expected
the following to be printed:

true true true
p.setValue( false );
ppp changed to: false
pp changed to: false
p changed to: false
false false false
p.setValue( true );
ppp changed to: true
pp changed to: true
p changed to: true
true true true

Are my expectations wrong or have I encountered a bug?

My version of Qt I build from git, cloned today, using the dev branch, following the guide
on the wiki, -developer-build.

@Eirik said in QProperty; binding and onValueChanged:

it is the fact that pp.onValueChanged(...) is never triggered I am wondering

Yes, that's what I was interested in, the order of calls is something I had suspected, that's why I wanted to understand what you get as output in this case.