Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Wie kann ich getter und setter für einen Q_ENUM benutzen?
Forum Updated to NodeBB v4.3 + New Features

Wie kann ich getter und setter für einen Q_ENUM benutzen?

Scheduled Pinned Locked Moved Solved German
11 Posts 2 Posters 1.6k Views
  • 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 Galilio

    Ich habe folgende:

    class CTierStub: public QObject {
        Q_OBJECT
        Q_PROPERTY(QString tierGroup READ getTierGroup WRITE setTierGroup NOTIFY tierGroupChanged)
        Q_PROPERTY(QString gender READ getGender WRITE setGender NOTIFY genderChanged)
    
    signals:
        void TierGroupChanged(QString strTierGroup);
        void genderChanged(QString strGender);
    
    public:
    //getter und setter ?
    
    private:
        enum TierGroup {
            Adult = 0,
            Pediatric,
            Neonatal
        };Q_ENUM(TierGroup);
    	
        enum Gender {
            Male,
            Female
        } ; Q_ENUM(Gender);
        
    };
    

    Danke

    J.HilkJ Offline
    J.HilkJ Offline
    J.Hilk
    Moderators
    wrote on last edited by J.Hilk
    #2

    Guten Morgen @Galilio

    ich fürchte du musst etwas weiter ausholen.

    Was genau willst du machen, weil deine Properties erwarten ein QString als Typen und nen enum ist im Prinzip ein int.

    Zudem ist die Enum-Deklaration im Privaten Teil deiner Klasse also von außen nicht sichtbar.

    Was willst du machen?
    Die Enums in QML verwenden, oder vielleicht einen Enumwert in lesbaren String umwandeln ?


    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


    Q: What's that?
    A: It's blue light.
    Q: What does it do?
    A: It turns blue.

    1 Reply Last reply
    0
    • G Offline
      G Offline
      Galilio
      wrote on last edited by
      #3

      @J-Hilk
      ich will gerne die Enums in QML verwenden und diese in einem lesbaren String umwandeln

      J.HilkJ 1 Reply Last reply
      0
      • G Galilio

        @J-Hilk
        ich will gerne die Enums in QML verwenden und diese in einem lesbaren String umwandeln

        J.HilkJ Offline
        J.HilkJ Offline
        J.Hilk
        Moderators
        wrote on last edited by
        #4

        @Galilio Tja,

        wir haben (noch) keine richtige Reflection in C++, normalerweise behilft man sich da mit einer function -> Enum zu String

        Da du Qt nutzt kannst du aber auf Qt's MetaEnum system zurückgreifen z.b:

         enum AppleType {
           Big,
          Small
        };
        Q_ENUM(AppleType)
        
        ...
        
        QMetaEnum mE = QMetaEnum::fromType<Klasse::AppleType>();
        qDebug() << mE.valueToKey(Klasse::Big);
        

        Das Meta Enum System erlaubt es dir auch C++ Enums direkt in QML zu benutzen, dazu musst du dein Enum auch mit dem Q_ENUM macro versehen und es registrieren via

        qmlRegisterUncreatableType<Klasse>("EnumsImportName", 1,0, "EnumPrefix", "Enums are not a type");
        

        dann kannst du es in QML importieren und nutzen:

        import EnumsImportName 1.0
        
        ....
        
        console.log(EnumPrefix.Big)
        

        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


        Q: What's that?
        A: It's blue light.
        Q: What does it do?
        A: It turns blue.

        G 2 Replies Last reply
        0
        • G Offline
          G Offline
          Galilio
          wrote on last edited by
          #5

          @J-Hilk

          danke für die Antwort
          Auf die QML Seite ist eigentlich alles gemacht was Registrierung (qmlRegisterUncreatableType) betrifft.
          Hier geht es eigentlich um einen Unittest für diese zu schreiben deswegen ist die Klasse so genannt worden " CTierStub". Diese ist nicht anders als Dummy Object, damit die Enums
          setzen und prüfen kann.

          1 Reply Last reply
          0
          • J.HilkJ J.Hilk

            @Galilio Tja,

            wir haben (noch) keine richtige Reflection in C++, normalerweise behilft man sich da mit einer function -> Enum zu String

            Da du Qt nutzt kannst du aber auf Qt's MetaEnum system zurückgreifen z.b:

             enum AppleType {
               Big,
              Small
            };
            Q_ENUM(AppleType)
            
            ...
            
            QMetaEnum mE = QMetaEnum::fromType<Klasse::AppleType>();
            qDebug() << mE.valueToKey(Klasse::Big);
            

            Das Meta Enum System erlaubt es dir auch C++ Enums direkt in QML zu benutzen, dazu musst du dein Enum auch mit dem Q_ENUM macro versehen und es registrieren via

            qmlRegisterUncreatableType<Klasse>("EnumsImportName", 1,0, "EnumPrefix", "Enums are not a type");
            

            dann kannst du es in QML importieren und nutzen:

            import EnumsImportName 1.0
            
            ....
            
            console.log(EnumPrefix.Big)
            
            G Offline
            G Offline
            Galilio
            wrote on last edited by
            #6

            @J-Hilk
            wird dann mein class so aussehen?:

            class CTierStub: public QObject {
                Q_OBJECT
            
            public:
            
                enum TierGroup {
                    Adult = 0,
                    Pediatric,
                    Neonatal
                };Q_ENUM(TierGroup);	
            }
            
            1 Reply Last reply
            0
            • J.HilkJ J.Hilk

              @Galilio Tja,

              wir haben (noch) keine richtige Reflection in C++, normalerweise behilft man sich da mit einer function -> Enum zu String

              Da du Qt nutzt kannst du aber auf Qt's MetaEnum system zurückgreifen z.b:

               enum AppleType {
                 Big,
                Small
              };
              Q_ENUM(AppleType)
              
              ...
              
              QMetaEnum mE = QMetaEnum::fromType<Klasse::AppleType>();
              qDebug() << mE.valueToKey(Klasse::Big);
              

              Das Meta Enum System erlaubt es dir auch C++ Enums direkt in QML zu benutzen, dazu musst du dein Enum auch mit dem Q_ENUM macro versehen und es registrieren via

              qmlRegisterUncreatableType<Klasse>("EnumsImportName", 1,0, "EnumPrefix", "Enums are not a type");
              

              dann kannst du es in QML importieren und nutzen:

              import EnumsImportName 1.0
              
              ....
              
              console.log(EnumPrefix.Big)
              
              G Offline
              G Offline
              Galilio
              wrote on last edited by
              #7

              @J-Hilk

              Hi @J-Hilk
              Was ist dann falsch an diese Schreibweise?

              class CGuiTierInfoStub: public QObject {
                  Q_OBJECT
                  Q_PROPERTY(TTierGroup TierGroup READ getTierGroup WRITE setTierGroup NOTIFY TierGroupChanged)
                  Q_PROPERTY(TGender gender READ getGender WRITE setGender NOTIFY genderChanged)
              
              signals:
                  void TierGroupChanged(TTierGroup enumTierGroup);
                  void genderChanged(TGender enumGender);
              
              public:
                  TTierGroup getTierGroup() const { return mTierGroup; }
                  void setTierGroup(const TTierGroup& enumValue) {
                      if(mTierGroup != enumValue) {
                          mTierGroup = enumValue;
                          emit TierGroupChanged(mTierGroup);
                      }
                  }
              
                  TGender getGender() const { return mGender; }
                  void setGender(const TGender& enumValue) {
                      if(mGender != enumValue) {
                          mGender = enumValue;
                          emit genderChanged(mGender);
                      }
                  }
              
                  enum TTierGroup {
                      Adult = 0,
                      Pediatric,
                      Neonatal
                  };Q_ENUM(TTierGroup);
              
                  enum TGender {
                      Male,
                      Female
                  } ; Q_ENUM(TGender);
              
              private:
                  TTierGroup mTierGroup;
                  TGender mGender;
              };
              Q_DECLARE_METATYPE(CGuiTierInfoStub::TTierGroup)
              Q_DECLARE_METATYPE(CGuiTierInfoStub::TGender)
              

              Danke

              J.HilkJ 1 Reply Last reply
              0
              • G Galilio

                @J-Hilk

                Hi @J-Hilk
                Was ist dann falsch an diese Schreibweise?

                class CGuiTierInfoStub: public QObject {
                    Q_OBJECT
                    Q_PROPERTY(TTierGroup TierGroup READ getTierGroup WRITE setTierGroup NOTIFY TierGroupChanged)
                    Q_PROPERTY(TGender gender READ getGender WRITE setGender NOTIFY genderChanged)
                
                signals:
                    void TierGroupChanged(TTierGroup enumTierGroup);
                    void genderChanged(TGender enumGender);
                
                public:
                    TTierGroup getTierGroup() const { return mTierGroup; }
                    void setTierGroup(const TTierGroup& enumValue) {
                        if(mTierGroup != enumValue) {
                            mTierGroup = enumValue;
                            emit TierGroupChanged(mTierGroup);
                        }
                    }
                
                    TGender getGender() const { return mGender; }
                    void setGender(const TGender& enumValue) {
                        if(mGender != enumValue) {
                            mGender = enumValue;
                            emit genderChanged(mGender);
                        }
                    }
                
                    enum TTierGroup {
                        Adult = 0,
                        Pediatric,
                        Neonatal
                    };Q_ENUM(TTierGroup);
                
                    enum TGender {
                        Male,
                        Female
                    } ; Q_ENUM(TGender);
                
                private:
                    TTierGroup mTierGroup;
                    TGender mGender;
                };
                Q_DECLARE_METATYPE(CGuiTierInfoStub::TTierGroup)
                Q_DECLARE_METATYPE(CGuiTierInfoStub::TGender)
                

                Danke

                J.HilkJ Offline
                J.HilkJ Offline
                J.Hilk
                Moderators
                wrote on last edited by
                #8

                @Galilio Sieht soweit ok aus

                Ich sehe Q_DECLARE_METATYPE, hast du es auch registered, weil es soll ja hier teil des Property Systems sein
                Dokumentation:

                Note that if you intend to use the type in queued signal and slot connections or in QObject's property system, you also have to call qRegisterMetaType() since the names are resolved at runtime.
                

                Und, dann achte drauf, das du immer mit dem vollem Namespace arbeitest den du für die Registrierung verwendet hast


                Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                Q: What's that?
                A: It's blue light.
                Q: What does it do?
                A: It turns blue.

                1 Reply Last reply
                0
                • G Offline
                  G Offline
                  Galilio
                  wrote on last edited by
                  #9

                  @J-Hilk
                  mit der getter und setter bekomme ich die Meldung, dass "unknow type name TPatientGroup bzw TGender "

                  J.HilkJ 1 Reply Last reply
                  0
                  • G Galilio

                    @J-Hilk
                    mit der getter und setter bekomme ich die Meldung, dass "unknow type name TPatientGroup bzw TGender "

                    J.HilkJ Offline
                    J.HilkJ Offline
                    J.Hilk
                    Moderators
                    wrote on last edited by J.Hilk
                    #10

                    @Galilio enum Definierung nach Obe, idealerweise vor den Constructor ( den du noch hinzufügen solltest um QObject richtig zu initialisieren!)

                    #ifndef CGUITIERINFOSTUB_H
                    #define CGUITIERINFOSTUB_H
                    
                    #include <QObject>
                    
                    class CGuiTierInfoStub: public QObject {
                        Q_OBJECT
                        Q_PROPERTY(TTierGroup TierGroup READ getTierGroup WRITE setTierGroup NOTIFY TierGroupChanged)
                        Q_PROPERTY(TGender gender READ getGender WRITE setGender NOTIFY genderChanged)
                    
                    public:
                        enum TTierGroup {
                            Adult = 0,
                            Pediatric,
                            Neonatal
                        };Q_ENUM(TTierGroup);
                    
                        enum TGender {
                            Male,
                            Female
                        } ; Q_ENUM(TGender);
                        
                    signals:
                        void TierGroupChanged(TTierGroup enumTierGroup);
                        void genderChanged(TGender enumGender);
                    
                    public:
                        explicit CGuiTierInfoStub(QObject *parent = nullptr) : QObject(parent){}
                        TTierGroup getTierGroup() const { return mTierGroup; }
                        void setTierGroup(const TTierGroup& enumValue) {
                            if(mTierGroup != enumValue) {
                                mTierGroup = enumValue;
                                emit TierGroupChanged(mTierGroup);
                            }
                        }
                    
                        TGender getGender() const { return mGender; }
                        void setGender(const TGender& enumValue) {
                            if(mGender != enumValue) {
                                mGender = enumValue;
                                emit genderChanged(mGender);
                            }
                        }
                    
                    
                    private:
                        TTierGroup mTierGroup;
                        TGender mGender;
                    };
                    Q_DECLARE_METATYPE(CGuiTierInfoStub::TTierGroup)
                    Q_DECLARE_METATYPE(CGuiTierInfoStub::TGender)
                    
                    #endif // CGUITIERINFOSTUB_H
                    
                    

                    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                    Q: What's that?
                    A: It's blue light.
                    Q: What does it do?
                    A: It turns blue.

                    G 1 Reply Last reply
                    0
                    • J.HilkJ J.Hilk

                      @Galilio enum Definierung nach Obe, idealerweise vor den Constructor ( den du noch hinzufügen solltest um QObject richtig zu initialisieren!)

                      #ifndef CGUITIERINFOSTUB_H
                      #define CGUITIERINFOSTUB_H
                      
                      #include <QObject>
                      
                      class CGuiTierInfoStub: public QObject {
                          Q_OBJECT
                          Q_PROPERTY(TTierGroup TierGroup READ getTierGroup WRITE setTierGroup NOTIFY TierGroupChanged)
                          Q_PROPERTY(TGender gender READ getGender WRITE setGender NOTIFY genderChanged)
                      
                      public:
                          enum TTierGroup {
                              Adult = 0,
                              Pediatric,
                              Neonatal
                          };Q_ENUM(TTierGroup);
                      
                          enum TGender {
                              Male,
                              Female
                          } ; Q_ENUM(TGender);
                          
                      signals:
                          void TierGroupChanged(TTierGroup enumTierGroup);
                          void genderChanged(TGender enumGender);
                      
                      public:
                          explicit CGuiTierInfoStub(QObject *parent = nullptr) : QObject(parent){}
                          TTierGroup getTierGroup() const { return mTierGroup; }
                          void setTierGroup(const TTierGroup& enumValue) {
                              if(mTierGroup != enumValue) {
                                  mTierGroup = enumValue;
                                  emit TierGroupChanged(mTierGroup);
                              }
                          }
                      
                          TGender getGender() const { return mGender; }
                          void setGender(const TGender& enumValue) {
                              if(mGender != enumValue) {
                                  mGender = enumValue;
                                  emit genderChanged(mGender);
                              }
                          }
                      
                      
                      private:
                          TTierGroup mTierGroup;
                          TGender mGender;
                      };
                      Q_DECLARE_METATYPE(CGuiTierInfoStub::TTierGroup)
                      Q_DECLARE_METATYPE(CGuiTierInfoStub::TGender)
                      
                      #endif // CGUITIERINFOSTUB_H
                      
                      
                      G Offline
                      G Offline
                      Galilio
                      wrote on last edited by
                      #11

                      @J-Hilk
                      danke

                      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