Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Unsolved Signals & Slots stopped working

    General and Desktop
    signal & slot c++11
    5
    15
    3612
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      gabor53 last edited by

      Hi,
      I have the following code which used to work:

          connect(ui->descr_TextEdit, &QTextEdit::textChanged, [this]()
          {
              description = getDescription ();
          });
      

      Now it gives me the following error messages:

      1. 'description' is not captured
      2. the lambda has no capture default
      3. QString 'description' declared here.

      How can I fix this?
      Thank you.

      1 Reply Last reply Reply Quote 0
      • P
        Paul Colby last edited by

        Hi @gabor53,

        Does your class still have a description member?

        P 1 Reply Last reply Reply Quote 0
        • G
          gabor53 last edited by

          Yes I have it.

          1 Reply Last reply Reply Quote 0
          • P
            Paul Colby last edited by

            Can you show the actual compiler error output?

            G 1 Reply Last reply Reply Quote 0
            • G
              gabor53 @Paul Colby last edited by

              Hi @Paul-Colby
              Here is the complete error message:

              C:\Programming\Projects\Folkfriends_1_0\additem.cpp:-1: In lambda function:
              C:\Programming\Projects\Folkfriends_1_0\additem.cpp:254: error: 'description' is not captured
              description = getDescription ();
              ^
              C:\Programming\Projects\Folkfriends_1_0\additem.cpp:252: the lambda has no capture-default
              connect(ui->descr_TextEdit, &QTextEdit::textChanged, this
              ^
              C:\Programming\Projects\Folkfriends_1_0\additem.cpp:29: 'QString description' declared here
              void Additem::Addcontent(QString name, QString newWhat, QString newMaterial, QString newColor, QString description, QString newmonth)
              ^

              kshegunov 1 Reply Last reply Reply Quote 0
              • V
                VRonin last edited by

                replacing [this] with [&] works?

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                G 1 Reply Last reply Reply Quote 0
                • kshegunov
                  kshegunov Moderators @gabor53 last edited by

                  @gabor53
                  If description is a function parameter you must capture it explicitly:

                  void Additem::Addcontent(QString name, QString newWhat, QString newMaterial, QString newColor, QString description, QString newmonth)
                  {
                      // ... 
                      connect(ui->descr_TextEdit, &QTextEdit::textChanged, [this, description]()
                      {
                          description = getDescription();
                      }); 
                      // ...
                  }
                  

                  But in any case such a capture is useless, because you can only do it by value.

                  Read and abide by the Qt Code of Conduct

                  V 1 Reply Last reply Reply Quote 0
                  • P
                    Paul Colby @Paul Colby last edited by

                    @Paul-Colby said:

                    Does your class still have a description member?

                    @gabor53 said:

                    Yes I have it.

                    void Additem::Addcontent(QString name, QString newWhat, QString newMaterial, QString newColor, QString description, QString newmonth)
                    

                    That's not a class member.

                    Cheers.

                    1 Reply Last reply Reply Quote 0
                    • V
                      VRonin @kshegunov last edited by

                      @kshegunov
                      From the compiler output Additem::Addcontent is at line 29 while the lambda is at line 252 so I doubt it's nested. It's just description missing as a class member full stop

                      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                      ~Napoleon Bonaparte

                      On a crusade to banish setIndexWidget() from the holy land of Qt

                      kshegunov 1 Reply Last reply Reply Quote 0
                      • kshegunov
                        kshegunov Moderators @VRonin last edited by

                        @VRonin

                        so I doubt it's nested

                        At this point we can guess and bet.

                        It's just description missing as a class member full stop

                        Perhaps, or maybe the function is spanning 300 lines. The point is, without a more complete piece of the code we can't know for sure.

                        @gabor53

                        Do you mind sharing your class declaration and Additem::Addcontent function?

                        Read and abide by the Qt Code of Conduct

                        1 Reply Last reply Reply Quote 0
                        • G
                          gabor53 @VRonin last edited by

                          @VRonin
                          Hi,
                          replacing [this] with [&] worked. Thank you.

                          kshegunov 1 Reply Last reply Reply Quote 0
                          • kshegunov
                            kshegunov Moderators @gabor53 last edited by

                            @gabor53
                            Perhaps it compiles, but have you tested if it runs okay? Judging by the compile error and the solution, I'd be really surprised if you don't get a segfault. My previous request - to provide the whole function definition - stands.

                            Read and abide by the Qt Code of Conduct

                            G 1 Reply Last reply Reply Quote 0
                            • G
                              gabor53 @kshegunov last edited by

                              Hi @kshegunov
                              Here is the full code:
                              additem.h
                              Addcontent function
                              Thank you for your help.

                              kshegunov 1 Reply Last reply Reply Quote 1
                              • kshegunov
                                kshegunov Moderators @gabor53 last edited by

                                @gabor53
                                You are hiding the class member with the function argument because they have the same name. I advise not to use the same name for local and class variables.

                                Read and abide by the Qt Code of Conduct

                                1 Reply Last reply Reply Quote 1
                                • jerome_isAviable
                                  jerome_isAviable last edited by

                                  1. 'description' is not captured
                                    said that in your lambda, 'description' has not been captured... then add it on the list of captured elements: [this, captured]
                                    I red inside the answers that you may declare same name for function and variable... don't do that, it will generate problems for sure.
                                  2. QString 'description' declared here
                                    it is a clue for said that the answer of call this.getDescription() should be a QString (QString getDescription() const;)
                                    so 'description' has to be a QString (i think in private area of this). because you are not pass it, it is an undeclared new object inside your lambda function.

                                  so give a varaible name unik and pass the variable inside your lambda by the array list [....] should fix your problem.

                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post