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

Tony Rietwyk tony at rightsoft.com.au
Sat Feb 8 01:10:45 CET 2020


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


More information about the Interest mailing list