Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-48497

QML enums should be 'strong'

    XMLWordPrintable

Details

    Description

      Given a class with a property which is an enum type

      #include <QGuiApplication>
      #include <QQuickView>
      #include <QDebug>
      
      class Something : public QObject
      {
          Q_OBJECT
          Q_PROPERTY(Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder  NOTIFY sortOrderChanged)
      public:
          Something(QObject* = 0)
          {
          }
      
          void setSortOrder(Qt::SortOrder sortOrder)
          {
            qDebug() << "setSortOrder" << sortOrder;
            if (mSortOrder != sortOrder)
            {
              mSortOrder = sortOrder;
              Q_EMIT sortOrderChanged();
            }
          }
      
          Qt::SortOrder sortOrder() const
          {
            return mSortOrder;
          }
      
      Q_SIGNALS:
        void sortOrderChanged();
      
      private:
          mutable Qt::SortOrder mSortOrder;
      };
      
      int main(int argc, char** argv)
      {
          QGuiApplication app(argc, argv);
      
          qmlRegisterType<Something>("Things", 1, 0, "Something");
      
          QQuickView view;
          view.setSource(QUrl("main.qml"));
          view.show();
      
          return app.exec();
      }
      
      #include "main.moc"
      

      QML code can set the property to any value, unbounded by the enum:

      import QtQuick 2.3
      
      import Things 1.0
      
      Rectangle {
          id: root
          width: 560
          height: 360
      
          Something {
              id: st
          }
      
          Component.onCompleted: {
              st.sortOrder = Qt.AscendingOrder;
              st.sortOrder = Qt.DescendingOrder;
              st.sortOrder = Qt.RelativeSize;
              st.sortOrder = Qt.AutoText;
              st.sortOrder = 7;
          }
      }
      
      setSortOrder Qt::SortOrder(AscendingOrder)
      setSortOrder Qt::SortOrder(DescendingOrder)
      setSortOrder Qt::SortOrder(DescendingOrder)
      setSortOrder Qt::SortOrder(2)
      setSortOrder Qt::SortOrder(7)
      

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              ulherman Ulf Hermann
              ske Steve
              Votes:
              4 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

                Created:
                Updated:

                Gerrit Reviews

                  There are no open Gerrit changes