代码之家  ›  专栏  ›  技术社区  ›  mohsen

在qml中使用c++enum

  •  2
  • mohsen  · 技术社区  · 7 年前

    我有一个 enum 我在qml中使用的

    class SettingManager : public QObject
    {
        Q_OBJECT
    public:
        enum BookKinds{
             BookKind1=0,
             BookKind2=1,
         };
         Q_ENUMS(BookKinds)
         Q_PROPERTY(BookKinds bookKind READ bookKind WRITE setBookKind NOTIFY bookKindChanged)
    
         explicit SettingManager(QObject *parent = nullptr);
         void setBookKind(BookKinds dkob);
         BookKinds bookKind();
      signals:
        void bookKindChanged();
    };
    

    在里面 main.cpp 我注册了 SettingManager

    qmlRegisterType<SettingManager>("Test",1,0,"SettingManager");
    

    我在qml文件中使用它

      onCurrentIndexChanged:
        {
            if(tbarBookKindForDisplay.currentIndex==0)
            {
               settingManager.bookKind=BookManager.BookKind1;
            }
            else if(tbarBookKindForDisplay.currentIndex==1){
                settingManager.bookKind=BookManager.BookKind2;
             }           
        }
    

    什么时候 CurrentIndex 属于 TabBar 发生以下更改错误:

    错误:无法将[未定义]分配给int

    1 回复  |  直到 7 年前
        1
  •  4
  •   Mitch    7 年前

    您将类型注册为 SettingManager 但使用它作为 BookManager 。正确的代码是:

    settingManager.bookKind = SettingManager.BookKind1;
    

    您还应该使用 Q_ENUM instead of Q_ENUMS