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. Connect Dynamically created Sliders and Labels (Solved)

Connect Dynamically created Sliders and Labels (Solved)

Scheduled Pinned Locked Moved General and Desktop
11 Posts 3 Posters 7.5k Views 1 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Hi,

    There are several things that are wrong with your code:
    Your ChangeText function signature is invalid
    Your connect statement is wrong.
    If you have put that code as is in a cpp file then it won't even compile

    You should check the "Signals And Slots":http://doc.qt.io/qt-5/signalsandslots.html chapter of Qt's documentation

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • R Offline
      R Offline
      Rondog
      wrote on last edited by
      #3

      I am not aware of any way to pass a pointer of the widget when the slot is called. There might be but I am not aware of it.

      If you have only a few slider-label combinations you could have a slot for each. Example:
      @
      change_text_slider1(int){;}
      change_text_slider2(int){;}
      // etc.
      @

      You could create a subclass of the slider. With a subclass you can emit your own signals (which can include a pointer or some other identifying information).

      @
      void MySlider::value_changed(int value)
      {
      int id=(identifier, maybe pointer,?);

      emit Value_Changed(id, value);
      }
      @

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #4

        "QSignalMapper":http://doc.qt.io/qt-5/qsignalmapper.html would probably help for that purpose

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • R Offline
          R Offline
          Rondog
          wrote on last edited by
          #5

          Thanks SGaist. Although this is not my thread I wasn't aware of QSignalMapper. Learned something new.

          1 Reply Last reply
          0
          • H Offline
            H Offline
            hypnomaki
            wrote on last edited by
            #6

            Rondog, I cant create So many Slots because i dont know how many sliders are going to be created.

            SGaist, this looks good, I just had a look at it but its not as easy.
            I tried:
            @
            QSlider *slider;
            QLabel *label;
            QSignalMapper *mapper = new QSignalMapper(this);
            connect(slider, SIGNAL(valueChanged(int)), mapper, SIGNAL(mapped(int)));
            connect(mapper,SIGNAL(mapped(int)),this,SIGNAL(LabelSlider(label,slider)));
            @
            @
            void Dashboard::LabelSlider(QLabel *label, QSlider *slider)
            {
            label->setText(QString::number(slider->value()));
            }
            @
            Its compiling but it doesnt work. What am I doing wrong?

            1 Reply Last reply
            0
            • R Offline
              R Offline
              Rondog
              wrote on last edited by
              #7

              From what I read it looks like you need to do something like this:

              @
              signalMapper = new QSignalMapper(this);
              ...
              connect(slider, SIGNAL(valueChanged(int)), signalMapper, SLOT(map()));
              signalMapper->setMapping(slider, slider); // not sure?
              ...
              connect(signalMapper, SIGNAL(mapped(QSlider*)),this, SLOT(value_changed(QSlider*)));

              ...

              void Dashboard::value_changed(QSlider *slider)
              {
              label->setText(QString::number(slider->value()));
              }

              @

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #8

                Not exactly no. You can't modify signal/slots signature like that.

                @
                signalMapper = new QSignalMapper(this);
                connect(slider, SIGNAL(valueChanged(int)), signalMapper, SLOT(map()));
                signalMapper->setMapping(slider, label);
                connect(signalMapper, SIGNAL(mapped(QWidget*)),this, SLOT(onMapped(QWidget*)));

                void Dashboard:: onMapped(QWidget *widget)
                {
                QSlider slider = qobject_cast<QSlider>(signalMapper->mapping(widget));
                QLabel label = qobject_cast<QLabel>(widget);
                if (label && slider) {
                label->setText(QString::number(slider->value()));
                }
                }
                @

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • R Offline
                  R Offline
                  Rondog
                  wrote on last edited by
                  #9

                  I was close I guess (hope that counts for something - lol).

                  This opens up a few possiblities for me. I had problems like this in the past and never realized this class existed. It can make a few things easier.

                  1 Reply Last reply
                  0
                  • H Offline
                    H Offline
                    hypnomaki
                    wrote on last edited by
                    #10

                    thx SGaist that acutally works!

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

                      Well, I try not to post buggy code ;)

                      Since it's all working now, please update the thread title prepending [solved] so other forum users may know a solution has been found :)

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0

                      • Login

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