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 4.6k 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, 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

                      26/26

                      25 Mar 2020, 07:11

                      • Login

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