Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Function with Signals & Slots
Qt 6.11 is out! See what's new in the release blog

Function with Signals & Slots

Scheduled Pinned Locked Moved Solved General and Desktop
functionsignal & slot
38 Posts 6 Posters 19.9k Views 4 Watching
  • 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.
  • L Lineaxe

    Hi , try this , I think it will handle what you want , use either the A) or B) lines of code depending on your need.

    Qstring m_fileName; // A) in the header for the class

    // inside function
    Qstring tempFileName; // B) at top of function containing following line
    tempFileName =findimage(bool); // A) use this if you don't care about the filename after the function is completed
    m_fileName=findimage(bool);// B) use this if you want the filename global (and possibly used by other classes)
    tempFileName =connect (Image_Button,SIGNAL(clicked(bool)),this,SLOT( m_fileName)); // or B) tempFileName
    // now use the values m_fileName or tempFileName // the m_fileName is global and can be used in other class functions

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #7

    @Lineaxe What is this?

    tempFileName =connect (Image_Button,SIGNAL(clicked(bool)),this,SLOT( m_fileName));
    

    connect(...) does not call the slot, it returns a bool signalling whether signal was connected to the slot or not. So your code will not even compile.

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • L Lineaxe

      Hi , try this , I think it will handle what you want , use either the A) or B) lines of code depending on your need.

      Qstring m_fileName; // A) in the header for the class

      // inside function
      Qstring tempFileName; // B) at top of function containing following line
      tempFileName =findimage(bool); // A) use this if you don't care about the filename after the function is completed
      m_fileName=findimage(bool);// B) use this if you want the filename global (and possibly used by other classes)
      tempFileName =connect (Image_Button,SIGNAL(clicked(bool)),this,SLOT( m_fileName)); // or B) tempFileName
      // now use the values m_fileName or tempFileName // the m_fileName is global and can be used in other class functions

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #8

      @Lineaxe And you cannot connect a signal to a variable! You can only connect a signal to a slot.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • L Offline
        L Offline
        Lineaxe
        wrote on last edited by
        #9

        right , I should have taken the tempFileName= out , it isn't even needed ...Hmm , looking over a code a bit closer

        QString Additem::findimage(bool)

        return(fileName);

        connect (Image_Button,SIGNAL(clicked(bool)),this,SLOT(findimage(bool)));

        It looks like findimage returns a filename , not a SLOT , so this code would not work. I guess the only way that it could potentially work is if it had a list of slotnames in the QString and it returned them to connect. ( I am really just getting to know the QT environment, as well) . I must say I do like the concept of signals and slots vs events & triggers.

        1 Reply Last reply
        0
        • L Offline
          L Offline
          Lineaxe
          wrote on last edited by
          #10

          Now in his original code for the slot he is using (findimage(bool)) , in the function code he can sure fileName is declared either public or private in the class's header ( m_fileName for example ) so that all the Additem's other class functions will have access to it. Get and Set accessor functions are commonly used with class variables (for many reasons I have discovered) .

          QString Additem::findimage(bool)
          m_fileName = fileDialog->getOpenFileName(this,
          tr("Finding Friend's Image"),sPath, tr("Image Files (*.png *.jpg *.bmp)"));

          return m_fileName;

          1 Reply Last reply
          0
          • jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #11

            The thing is:

            connect (Image_Button,SIGNAL(clicked(bool)),this,SLOT(findimage(bool)));
            qDebug() <<"The image path is (in main): " << fileName;
            
            • it doesn't matter where fileName (or m_fileName) is declared, after the connect(...) call it will not be set yet because the findimage(bool) slot was not yet called. It will be called when the user clicks on the button - and you never know when the user will click the button.

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • G Offline
              G Offline
              gabor53
              wrote on last edited by
              #12

              Thank you all. Now I understand what's wrong. After the user clicks Image_Button, I want to display the image in a grid layout in which the Image_Button is. Is there a way I can go back to the grid layout AFTER the user clicked Image_Button and insert the choosen image next to the button?

              1 Reply Last reply
              0
              • mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #13

                Hi if u use @JordanHarris smart version,
                you could do something like
                connect(imageButton, &QPushButton::clicked, this {
                imagePath = findImage();
                QPixmap pic(imagePath);
                ui->SomeQLabel->setPixmap(pic);
                });

                you must insert the "SomeQLabel" into the layout. (just a normal Qlabel)

                G 1 Reply Last reply
                1
                • mrjjM mrjj

                  Hi if u use @JordanHarris smart version,
                  you could do something like
                  connect(imageButton, &QPushButton::clicked, this {
                  imagePath = findImage();
                  QPixmap pic(imagePath);
                  ui->SomeQLabel->setPixmap(pic);
                  });

                  you must insert the "SomeQLabel" into the layout. (just a normal Qlabel)

                  G Offline
                  G Offline
                  gabor53
                  wrote on last edited by
                  #14

                  @mrjj ,
                  I implemented

                  connect(Image_Button, &QPushButton::clicked, [this]() { imagePath = findimage(); })
                  

                  and I got the following error message:
                  C:\Programming\backup\Folkfriends\additem.cpp:195: error: no match for 'operator=' (operand types are 'QString' and 'void')
                  connect(Image_Button, &QPushButton::clicked, this { imagePath = findimage(); });
                  ^
                  I'm wondering what am I missing.

                  1 Reply Last reply
                  0
                  • mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #15

                    well basically it says you are doing
                    void = QString
                    so check that findimage returns Qstring and that
                    imagePath is also declared Qstring

                    G 1 Reply Last reply
                    0
                    • mrjjM mrjj

                      well basically it says you are doing
                      void = QString
                      so check that findimage returns Qstring and that
                      imagePath is also declared Qstring

                      G Offline
                      G Offline
                      gabor53
                      wrote on last edited by
                      #16

                      @mrjj
                      I did that. Now it says
                      C:\Programming\backup\Folkfriends\additem.cpp:195: error: expected primary-expression before ')' token
                      connect(Image_Button, &QPushButton::clicked, this { imagePath = findimage(QString); });
                      ^

                      1 Reply Last reply
                      0
                      • mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by
                        #17

                        Does ur compiler support lambdas?
                        Try with empty { }

                        connect(Image_Button, &QPushButton::clicked, [this]() {  })
                        

                        you need Qt 5.5 and newer compiler.

                        G 1 Reply Last reply
                        0
                        • mrjjM mrjj

                          Does ur compiler support lambdas?
                          Try with empty { }

                          connect(Image_Button, &QPushButton::clicked, [this]() {  })
                          

                          you need Qt 5.5 and newer compiler.

                          G Offline
                          G Offline
                          gabor53
                          wrote on last edited by
                          #18

                          @mrjj
                          How can I find out if it supports lambdas?

                          mrjjM 1 Reply Last reply
                          0
                          • G gabor53

                            @mrjj
                            How can I find out if it supports lambdas?

                            mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on last edited by
                            #19

                            @gabor53
                            well it can then compile the line.
                            what compiler is it ?
                            VS or mingw?
                            and what version?

                            G 1 Reply Last reply
                            0
                            • mrjjM mrjj

                              @gabor53
                              well it can then compile the line.
                              what compiler is it ?
                              VS or mingw?
                              and what version?

                              G Offline
                              G Offline
                              gabor53
                              wrote on last edited by
                              #20

                              @mrjj
                              I have mingw 4.9.2 32 bit

                              mrjjM 1 Reply Last reply
                              0
                              • G gabor53

                                @mrjj
                                I have mingw 4.9.2 32 bit

                                mrjjM Offline
                                mrjjM Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on last edited by mrjj
                                #21

                                @gabor53
                                ahh, u might need
                                CONFIG+=c++11
                                in your .pro file for it to use c++ 11 :)

                                G 1 Reply Last reply
                                0
                                • mrjjM mrjj

                                  @gabor53
                                  ahh, u might need
                                  CONFIG+=c++11
                                  in your .pro file for it to use c++ 11 :)

                                  G Offline
                                  G Offline
                                  gabor53
                                  wrote on last edited by
                                  #22

                                  @mrjj
                                  I have that too, so I guess it supports lambdas.

                                  kshegunovK 1 Reply Last reply
                                  0
                                  • G gabor53

                                    @mrjj
                                    I have that too, so I guess it supports lambdas.

                                    kshegunovK Offline
                                    kshegunovK Offline
                                    kshegunov
                                    Moderators
                                    wrote on last edited by
                                    #23

                                    @gabor53
                                    It's not the lambda.

                                    imagePath = findimage(QString);

                                    This doesn't make sense neither to the compiler nor to me, so you should fix it. What argument are you trying to use findimage with? Currently it has none, and instead of an argument a type name is provided.

                                    Kind regards.

                                    Read and abide by the Qt Code of Conduct

                                    mrjjM 1 Reply Last reply
                                    2
                                    • kshegunovK kshegunov

                                      @gabor53
                                      It's not the lambda.

                                      imagePath = findimage(QString);

                                      This doesn't make sense neither to the compiler nor to me, so you should fix it. What argument are you trying to use findimage with? Currently it has none, and instead of an argument a type name is provided.

                                      Kind regards.

                                      mrjjM Offline
                                      mrjjM Offline
                                      mrjj
                                      Lifetime Qt Champion
                                      wrote on last edited by
                                      #24

                                      @kshegunov
                                      ahh good spotted. thats the void = QString :)
                                      I completely missed that .)

                                      kshegunovK 1 Reply Last reply
                                      0
                                      • mrjjM mrjj

                                        @kshegunov
                                        ahh good spotted. thats the void = QString :)
                                        I completely missed that .)

                                        kshegunovK Offline
                                        kshegunovK Offline
                                        kshegunov
                                        Moderators
                                        wrote on last edited by kshegunov
                                        #25

                                        @mrjj
                                        I just read the compiler errors, it says it right there:

                                        expected primary-expression before ')' token

                                        ;)

                                        Read and abide by the Qt Code of Conduct

                                        mrjjM 1 Reply Last reply
                                        0
                                        • kshegunovK kshegunov

                                          @mrjj
                                          I just read the compiler errors, it says it right there:

                                          expected primary-expression before ')' token

                                          ;)

                                          mrjjM Offline
                                          mrjjM Offline
                                          mrjj
                                          Lifetime Qt Champion
                                          wrote on last edited by
                                          #26

                                          @kshegunov
                                          yeah it's a meaningful and good compiler error :)

                                          1 Reply Last reply
                                          1

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved