Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Nested class in Qt5
Forum Updated to NodeBB v4.3 + New Features

Nested class in Qt5

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
26 Posts 5 Posters 5.3k Views 3 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.
  • J jsulm
    20 Mar 2020, 11:43

    @Juancinho_cardecan Where do you call brightness::brightnessText?
    Do you call it on rgbLed::obj or maybe on another brightness instance?

    J Offline
    J Offline
    Juancinho_cardecan
    wrote on 20 Mar 2020, 12:04 last edited by
    #15

    @jsulm I called here after your words but the value doesn't change:

    void rgbLed::rgbRecive(const QString &in)
    {
    qDebug() << "ColorPicked:" << in;

    QStringList listNew = in.split(",");
    QStringList a_list = listNew[0].split("(");
    QStringList b_list = listNew[2].split(")");
    
    obj.brightnessText(in);
    int b = obj.getBrightValue();
    qDebug() << "Value: " << b;
    

    }

    J 1 Reply Last reply 20 Mar 2020, 12:08
    0
    • J Juancinho_cardecan
      20 Mar 2020, 12:04

      @jsulm I called here after your words but the value doesn't change:

      void rgbLed::rgbRecive(const QString &in)
      {
      qDebug() << "ColorPicked:" << in;

      QStringList listNew = in.split(",");
      QStringList a_list = listNew[0].split("(");
      QStringList b_list = listNew[2].split(")");
      
      obj.brightnessText(in);
      int b = obj.getBrightValue();
      qDebug() << "Value: " << b;
      

      }

      J Offline
      J Offline
      jsulm
      Lifetime Qt Champion
      wrote on 20 Mar 2020, 12:08 last edited by
      #16

      @Juancinho_cardecan Called where? And did you call it on rgbLed::obj?

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

      J 2 Replies Last reply 20 Mar 2020, 12:17
      2
      • J jsulm
        20 Mar 2020, 12:08

        @Juancinho_cardecan Called where? And did you call it on rgbLed::obj?

        J Offline
        J Offline
        Juancinho_cardecan
        wrote on 20 Mar 2020, 12:17 last edited by
        #17
        This post is deleted!
        1 Reply Last reply
        0
        • J jsulm
          20 Mar 2020, 12:08

          @Juancinho_cardecan Called where? And did you call it on rgbLed::obj?

          J Offline
          J Offline
          Juancinho_cardecan
          wrote on 20 Mar 2020, 12:30 last edited by
          #18

          @jsulm No I din't call it on rgbLed::obj, I called it inside the function void rgbLed::rgbRecive

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mrjj
            Lifetime Qt Champion
            wrote on 20 Mar 2020, 13:00 last edited by
            #19

            Hi
            So here

            void rgbLed::rgbRecive(const QString &in)
            {
            obj.brightnessText(in);
            int b = obj.getBrightValue();
            

            b is not what you expect ?

            J 1 Reply Last reply 20 Mar 2020, 13:08
            1
            • M mrjj
              20 Mar 2020, 13:00

              Hi
              So here

              void rgbLed::rgbRecive(const QString &in)
              {
              obj.brightnessText(in);
              int b = obj.getBrightValue();
              

              b is not what you expect ?

              J Offline
              J Offline
              Juancinho_cardecan
              wrote on 20 Mar 2020, 13:08 last edited by
              #20

              @mrjj yes it's not what I'm expecting, it might be changing all the time but the value is zero always.

              M 1 Reply Last reply 20 Mar 2020, 13:11
              0
              • J Juancinho_cardecan
                20 Mar 2020, 13:08

                @mrjj yes it's not what I'm expecting, it might be changing all the time but the value is zero always.

                M Offline
                M Offline
                mrjj
                Lifetime Qt Champion
                wrote on 20 Mar 2020, 13:11 last edited by mrjj
                #21

                @Juancinho_cardecan
                I would check

                brightValue = Bright.toInt(&flag);
                (in void brightness::brightnessText(const QString &in))
                and see if flag is false as that mean text to Int failed.

                J 1 Reply Last reply 23 Mar 2020, 16:34
                1
                • M mrjj
                  20 Mar 2020, 13:11

                  @Juancinho_cardecan
                  I would check

                  brightValue = Bright.toInt(&flag);
                  (in void brightness::brightnessText(const QString &in))
                  and see if flag is false as that mean text to Int failed.

                  J Offline
                  J Offline
                  Juancinho_cardecan
                  wrote on 23 Mar 2020, 16:34 last edited by
                  #22

                  @mrjj the flag is true and the value of brightValue is passing correctly, then the text to Int didn't failed, i dont know what is happening because if the values from QML are passing correctly, I'm calling in the wrong way the function brightnessText inside:

                  cpp file:

                  void rgbLed::rgbRecive(const QString &in)
                  {
                       my_brightness.brightnessText(in);
                      int b = my_brightness.getBrightValue();
                      qDebug() << "Value: " << b;
                  }
                  
                  void brightness::brightnessText(const QString &in)
                  {
                      QString Bright = in;
                      int brightValue;
                      brightValue = Bright.toInt(&flag);
                      qDebug() << "brightValue: " << brightValue;
                      qDebug() << "flag: " << flag;
                      setBrightValue(brightValue);
                  
                      qDebug() << "bright: " << brightValue;
                  }
                  
                  
                  
                  

                  main.cpp:

                  int main(int argc, char *argv[])
                  {
                  
                      QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
                      QGuiApplication app(argc, argv);
                     
                  
                      QQmlApplicationEngine engine;
                      engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
                      if (engine.rootObjects().isEmpty())
                              return -1;
                  
                      //Root Object to find Items in QML
                      QObject* root = engine.rootObjects()[0];
                      assert(root != nullptr);
                  
                      // The QML Item to which we want to inject our QML-Item-loaded-from-file
                      QQuickItem* colorSelector = qobject_cast<QQuickItem*>(root->findChild<QObject*>("colorSelector"));
                      assert(colorSelector != nullptr);
                  
                  
                      // Load the QML file to a component
                      QString qml_path = "ColorSelector.qml";
                      QQmlComponent comp(&engine, QUrl::fromLocalFile(qml_path));
                  
                      QScopedPointer<rgbLed> slider (new rgbLed);
                      engine.rootContext()->setContextProperty("slider", slider.data());
                      QObject *topLevel = engine.rootObjects().value(0);
                      QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);
                  
                      // Create an instance of the component
                      rgbLed my_rgbLed;//Creation an Object instance
                      brightness my_brightness;
                  
                      //Code to conecct a signal with the slot
                      QObject::connect(colorSelector, SIGNAL(colorChanged(QString)), &my_rgbLed, SLOT(rgbRecive(QString)));
                  
                      // connect our QML signal to our C++ slot
                        QObject::connect(window, SIGNAL(submitTextField(QString)), &my_brightness, SLOT(brightnessText(QString)));
                  
                      return app.exec();
                  }
                  
                  
                  

                  header file:

                  class rgbLed;
                  
                  class brightness : public QObject
                  {
                      Q_OBJECT
                  public:
                      explicit brightness(QObject *parent = 0);
                      friend rgbLed;
                      void setBrightValue(int newbrightValueMember)
                      {
                          brightValueMember = newbrightValueMember;
                      };
                      int getBrightValue()
                      {
                          return brightValueMember;
                      }
                  
                      bool flag = 0;
                      int brightValueMember;
                  
                  public slots:
                      void brightnessText(const QString& in);
                  };
                  
                  
                  class rgbLed : public QObject
                  {
                      Q_OBJECT
                      Q_PROPERTY(int bright READ brigfht WRITE setBright NOTIFY brightChanged)
                  public:
                      explicit rgbLed(QObject *parent = nullptr);
                      brightness my_brightness;
                      int regresion_red(int red);
                      int regresion_green(int green);
                      int regresion_blue(int blue);
                  
                      Q_INVOKABLE int bright();
                      Q_INVOKABLE int setBright(int x);
                      Q_INVOKABLE void add(rgbLed *x);
                  
                  
                      int r;
                      int g;
                      int b;
                      int r2;
                      int g2;
                      int b2;
                      int brightValue;
                      int myBrightness;
                      QStringList list;
                      QString my_in;
                  
                      int red = 0;
                      int green = 0;
                      int blue = 0;
                      int pos = 0 ;
                      bool flag = 0;
                      int x;
                  
                  signals:
                      void brightChanged(int x);
                  
                  public slots:
                      void rgbRecive(const QString &in);
                  }
                  
                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on 23 Mar 2020, 17:50 last edited by mrjj
                    #23

                    Hi
                    I think you have 2 instances of brightness called my_brightness

                    void rgbLed::rgbRecive(const QString &in)
                    {
                    my_brightness.brightnessText(in); <<< is the SAME my_brightness as you have in main.cpp?
                    int b = my_brightness.getBrightValue();
                    qDebug() << "Value: " << b;
                    }

                    so
                    rgbLed my_rgbLed;//Creation an Object instance
                    brightness my_brightness;

                    how does the my_brightness from outside come into

                    void rgbLed::rgbRecive(const QString &in) ?
                    It seems it has its own ?
                    So one is being updated but other is not ?

                    In the original code, it was called

                    class rgbLed : public QObject
                    {
                        Q_OBJECT
                        Q_PROPERTY(int bright READ brigfht WRITE setBright NOTIFY brightChanged)
                    public:
                        explicit rgbLed(QObject *parent = nullptr);
                        brightness obj; <<< the old internal name of the instance
                    

                    So it works from QML
                    as you do
                    // connect our QML signal to our C++ slot
                    QObject::connect(window, SIGNAL(submitTextField(QString)), &my_brightness, SLOT(brightnessText(QString)));

                    and that changes the one in Mian.cpp
                    but the rgbLed my_rgbLed; and its "obj" is not.

                    I assume you want the brigness instance inside my_rgbLed to change ?

                    J 1 Reply Last reply 24 Mar 2020, 06:10
                    3
                    • M mrjj
                      23 Mar 2020, 17:50

                      Hi
                      I think you have 2 instances of brightness called my_brightness

                      void rgbLed::rgbRecive(const QString &in)
                      {
                      my_brightness.brightnessText(in); <<< is the SAME my_brightness as you have in main.cpp?
                      int b = my_brightness.getBrightValue();
                      qDebug() << "Value: " << b;
                      }

                      so
                      rgbLed my_rgbLed;//Creation an Object instance
                      brightness my_brightness;

                      how does the my_brightness from outside come into

                      void rgbLed::rgbRecive(const QString &in) ?
                      It seems it has its own ?
                      So one is being updated but other is not ?

                      In the original code, it was called

                      class rgbLed : public QObject
                      {
                          Q_OBJECT
                          Q_PROPERTY(int bright READ brigfht WRITE setBright NOTIFY brightChanged)
                      public:
                          explicit rgbLed(QObject *parent = nullptr);
                          brightness obj; <<< the old internal name of the instance
                      

                      So it works from QML
                      as you do
                      // connect our QML signal to our C++ slot
                      QObject::connect(window, SIGNAL(submitTextField(QString)), &my_brightness, SLOT(brightnessText(QString)));

                      and that changes the one in Mian.cpp
                      but the rgbLed my_rgbLed; and its "obj" is not.

                      I assume you want the brigness instance inside my_rgbLed to change ?

                      J Offline
                      J Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on 24 Mar 2020, 06:10 last edited by
                      #24

                      @mrjj said in Nested class in Qt5:

                      I think you have 2 instances of brightness called my_brightness

                      I already tryied to explain that...

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

                      1 Reply Last reply
                      3
                      • J Offline
                        J Offline
                        JonB
                        wrote on 24 Mar 2020, 10:35 last edited by
                        #25

                        @Juancinho_cardecan
                        Assuming @jsulm & @mrjj are correct, each time you create a brightness object anywhere why don't you set its https://doc.qt.io/qt-5/qobject.html#objectName-prop (setObjectName()) to a unique string, then you can see whether one instance is different from another. Printing out &brightnessObjectInstance may also tell you the same, I think.

                        1 Reply Last reply
                        2
                        • M Offline
                          M Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on 25 Mar 2020, 07:11 last edited by mrjj
                          #26

                          Hi

                          Could you try to add

                          brightness & rgbLed: :getBrightness() {
                          return obj; // or what you called it
                          }

                          to
                          class rgbLed : public QObject

                          then in main.cpp

                          QObject::connect(window, SIGNAL(submitTextField(QString)), my_rgbLed.getBrightness(), SLOT(brightnessText(QString)));

                          and remove all
                          brightness my_brightness;
                          as we dont want to use brightness alone ever, only via rgbLed.

                          1 Reply Last reply
                          0

                          24/26

                          24 Mar 2020, 06:10

                          • Login

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