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-boun...@qt-project.org] On Behalf Of Jonathan 
Purol
Sent: Friday, February 7, 2020 2:44 PM
To: Qt Project <interest@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@qt-project.org
https://lists.qt-project.org/listinfo/interest
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to