Qt new style signals/slots

Dirk Hohndel dirk at hohndel.org
Sat Jan 18 11:32:11 PST 2020


Hi Willem,

> On Jan 18, 2020, at 3:48 AM, Willem Ferguson <willemferguson at zoology.up.ac.za> wrote:
> 
> Following excellent review of a recent PR, I was asked to update the conventional string-based Qt connections to the new-style Qt connections. (https://wiki.qt.io/New_Signal_Slot_Syntax <https://wiki.qt.io/New_Signal_Slot_Syntax>) The old style is: 
> 
> connect(
>     sender, SIGNAL( valueChanged( QString, QString ) ),
>     receiver, SLOT( updateValue( QString ) )
> );
> My old-style connection is:
> 
> connect(ui.timeDiffEdit, SIGNAL(timeChanged(const QTime)), this, SLOT(timeDiffEditChanged()));
> 
> For the new style the specification in the Qt documentation is:
> 
> connect(
>     sender, &Sender::valueChanged,
>     receiver, &Receiver::updateValue
> );

So as you see here, the documentation wants you to use the function address as argument...
> My formulation, reflecting my strong deficiencies in Qt coding but following the above, for the new connection is:
> 
>     connect(this, ui.timeDiffEdit->timeChanged(ui.timeDiffEdit->time()), this, this->timeDiffEditChanged());
> 
> The second parameter needs to be a pointer, for which I used ui.timeDiffEdit. The timeChanged() signal needs a QTime value, so I provided that with ui.timeDeffEdit->time(), the actual amount of time by which the timeDiffEdit has been changed.
> The last parameter also needs an address, provided by this->timeDiffEditChanged() is the response to the signal from timeDiffEdit->timeChanged(). It is a void function and the source of build problems. The compiler generates an error:
> 
> /home/willem/src/subsurface/desktop-widgets/importgps.cpp:30:104: error: invalid use of void expression
>   connect(this, ui.timeDiffEdit->timeChanged(ui.timeDiffEdit->time()), this, this->timeDiffEditChanged());
>                                                                                                         ^
> 
> Obviously, accessing the pointer this->timeDiffEditChanged() should not return a void value. I have no idea of how to respond to this error. Any suggestions are very welcome. For completeness I attach the code for the full object to this email.
> 
> 


How about  

connect(this, &QTimeEdit::timeChanged, this, &ImportGPS::timeDiffEditChanged);

That seems like it would follow the syntax suggested above, right?

/D
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.subsurface-divelog.org/pipermail/subsurface/attachments/20200118/eba8ac60/attachment-0001.html>


More information about the subsurface mailing list