Шаг 9.
Библиотека Qt.
Определение свойств объектов

    На этом шаге рассмотрим определение свойств объектов.

    Свойства — это поля, для которых обязательно должны существовать методы чтения. С их помощью можно получать доступ к атрибутам объектов извне, например из языка сценариев Qt Script.

    Свойства широко используются в визуальной среде разработки пользовательского интерфейса Qt Designer. Этот механизм реализован в Qt при помощи директив препроцессора.

    Задается свойство при помощи макроса Q_PROPERTY. Определение свойства в общем виде выглядит следующим образом:

Q_PROPERTY(type name // тип и имя свойства 
           READ getFunction  //имя метода чтения 
           // определение остальных параметров не является обязательным 
           [WRITE setFunction] // имя метода записи  
           [RESET resetFunction] //имя метода сброса значения      
           [DESIGNABLE bool] // является логическим  значением,
                             // говорящим о том, должно ли свойство появляться
                             // в инспекторе свойств Qt Designer        
           [SCRIPTABLE bool] // логическое значение,
                             // которое управляет тем, будет ли свойство
                             // доступно для языка сценариев Qt Script      
           [STORED bool] //управляет сериализацией,
                         // т. е. тем, будет ли свойство запоминаться
                         // во время сохранения объекта         
           )  

    Рассмотрим простой пример - определим в классе свойство для управления режимом только чтения.

class MyClass : public QObject // класс MyClass,
                               //наследуется от класса QObject 
{
      Q_OBJECT
      Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
      private:
              bool m_bReadOnly; //определяем атрибут m_bReadOnly,
                                // в котором будут запоминаться значения состояния
      public:
             MyClass(QObject* pobj = 0) : QObject(pobj)
                                        , m_bReadOnly(false)
             // атрибут m_bReadOnly инициализируется
             // в конструкторе значением false 
             {
             }
      public:
       // Для получения и изменения значения атрибута в классе MyClass
       // определены методы isReadOnly() и setReadOnly().
       // Эти методы регистрируются в макросе Q_PROPERTY.
       // Метод isReadOnly() служит для получения значения,
       // поэтому указывается в секции READ,
       // а метод setReadOnly() — для изменения значения,
       // поэтому пишется в секции WRITE.  
             void setReadOnly(bool bReadOnly)
             {
                  m_bReadOnly = bReadOnly;
             }
             bool isReadOnly() const
             {
                  return m_bReadOnly;
             }
}            

    Из программы можно изменить значение свойства readOnly следующим образом:

pobj->setProperty("readOnly", true);  

    А так можно получить текущее значение свойства readOnly:

bool bReadOnly = pobj->property("readOnly").toBool(); 

    На следующем шаге рассмотрим механизм сигналов и слотов.




Предыдущий шаг Содержание Следующий шаг