[Interest] Fwd: Re: Signal/Slot connection fails, even though QMetaObject::activate is called

Jonathan Purol contact at folling.de
Sat Feb 8 03:37:15 CET 2020


Thanks to Sze-Howe for pointing me out that I should post this to the 
global thread, instead of to just the people who I talked to before.
Sorry to the two people who have now received this message twice!

sincerely,
Folling


-------- Forwarded Message --------
Subject: 	Re: [Interest] Signal/Slot connection fails, even though 
QMetaObject::activate is called
Date: 	Sat, 8 Feb 2020 01:21:04 +0100
From: 	Jonathan Purol <contact at folling.de>
To: 	Tony Rietwyk <tony at rightsoft.com.au>
CC: 	Scott Bloom <scott at towel42.com>



I am so sincerely sorry everyone.
After manually removing every line of code to see when a MVCE would 
work, I found a loose `blockSignals(true)` flying around that was there 
from a debugging session.

I just want to curl up and cry, either in laughter or in sadness - but 
three hours later and it finally works - sorry for wasting your time.

sincerely,
Folling

On 2/8/20 1:10 AM, Tony Rietwyk wrote:
> Hi,
>
> Does it work if you don't pass 'this' as the third argument to 
> connect?  I never use that particular overload of connect. I usually 
> pass the lambda as the third argument.
>
> Hope that helps, Tony
>
>
> On 8/02/2020 10:03 am, Scott Bloom wrote:
>> Are you sure the function is getting called (via a break point)?
>>
>>
>>
>> -----Original Message-----
>> From: Interest [mailto:interest-bounces at qt-project.org] On Behalf Of 
>> Jonathan Purol
>> Sent: Friday, February 7, 2020 2:44 PM
>> To: Qt Project <interest at qt-project.org>
>> Subject: [Interest] Signal/Slot connection fails, even though 
>> QMetaObject::activate is called
>>
>> Hello everyone,
>>
>> I have a QMainWindow subclass called `text_editor` with a function 
>> `save` which looks as follows:
>> ```cpp
>> void text_editor::save() {
>>
>>       _textbox->document()->setModified(false);
>>       _textbox->setFocus();
>>
>>       emit saved();
>>
>> }
>> ```
>>
>> I now connect to that slot in another class like this:
>> ```cpp
>> _information_editor = new text_editor{this};
>>
>> connect(
>>       _information_editor,
>>       &text_editor::saved,
>>       this,
>>       [=]() {
>>           std::cout << "hello\n";
>>       }
>> );
>>
>> ```
>>
>> I have verified that the signal is emitted, in fact, the method 
>> generated by the moc:
>> ```cpp
>> // SIGNAL 0
>> void text_editor::saved()
>> {
>>       QMetaObject::activate(this, &staticMetaObject, 0, nullptr); } 
>> ``` is definitely called (verified with gdb and some other debugging 
>> shenenigans).
>> In addition, the connection object returned by `connect` is valid, as 
>> verified by its implicit bool-cast operator.
>> However, "hello" is never printed. I suspected this could be because 
>> `text_editor` inherits from `QMainWindow` and could have a different 
>> thread affinity, so I tried the following things:
>>
>> 1. Move the editor to the same thread as the object which establishes 
>> the connection 2. Use a QueuedConnection 3. Connect to the slot from 
>> WITHIN the text editor itself, making sure that we are 100% on the 
>> same slot
>>
>> and none of them worked.
>> Just for clarification, the print of "hello" is only an example, so 
>> even if there was some issue with that, I would have detected it, the 
>> actual code is of course different.
>>
>> I'm really out of luck here, and would appreciate any help.
>>
>> Sincerely,
>> Folling
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> https://lists.qt-project.org/listinfo/interest
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> https://lists.qt-project.org/listinfo/interest
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> https://lists.qt-project.org/listinfo/interest
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20200208/ef03d9e8/attachment.html>


More information about the Interest mailing list