On 9/18/12 11:00 AM, Konrad Rosenbaum wrote: > On Tuesday 18 September 2012 14:21:58 Stephen Chu wrote: >> On 9/18/12 4:10 AM, Thiago Macieira wrote: >>>> How could I solve this? >>>> >>>> In Qt 4 I could specialize the signal using SIGNAL(valueChanged(int)), >>>> how could I do in Qt 5? >>>> >>> void (QSpinBox:: *signal)(int) = &QSpinBox::valueChanged; >>> QObject::connect(spinBox, signal, slider, &QSlider::setValue); >> >> or: >> >> QObject::connect(spinBox, (void (QSpinBox:: *)(int)) >> &QSpinBox::valueChanged, slider, &QSlider::setValue); >> >> if you want to keep it in one line. >> >> I like this new syntax much better since it finds signal/slot mismatches >> at compile time. I used to miss the connection mismatch messages in the >> sea of my REALLY chatty logs. And pulling my hairs wondering why >> something doesn't work. :) > > Actually using C-style casts you still run the risk of creating garbage if you > change the parameter types. Above: if QSpinBox had a signal > valueChanged(float) and no other override for that method name it would go > undetected and may lead to interesting situations during runtime.
I realized that right after I sent the mail. :) > Safer: > > QObject::connect(spinBox, static_cast<void (QSpinBox:: *)(int)> > (&QSpinBox::valueChanged), slider, &QSlider::setValue); > > This way whenever you change the parameter type(s) the compiler will detect > it. Thanks for the fix. That's a much better way. _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest