Глава 14. Создание элементов графического интерфейса
Q S t i r n g t e x t ( ) const ;
void s e t T e x t ( const QStri ng &t e x t ) ;
bool i s V i s i b l e ( ) const ;
void s e t V i s i b l e ( bool i s V i s i b l e ) ;
Наличие отдельного метода для установки значения позволяет запрограм-
мировать дополнительные действия, а также проверить допустимость значения,
которое устанавливается. В свою очередь, отдельные методы для установки зна-
чения дают возможность косвенного использования уже существующих свойств.
Изменение значения свойства возможно, как через прямое использование мето-
дов установки и получения значения свойства, так и используя средства мета-
объектной системы Qt. Также есть возможность определения доступных свойств
во время выполнения программы.
Мы рассмотрим определение свойств на примере создания собственного
виджета-индикатора LedIndicator, который будет находиться в одном, вклю-
чённом или выключенном, состоянии в зависимости от значения свойства.
Для начала, создадим оконный проект и добавим к нему класс LedIndicator,
унаследованный от QWidget:
c l a s s L e d I n d i c a t o r : public QWidget
{
Q_OBJECT
Q_PROPERTY( Q S t r i n g t e x t READ t e x t WRITE s e t T e x t )
Q_PROPERTY( bool turnedOn READ isTurnedOn WRITE setTurnedOn NOTIFY
s t a t e T o g g l e d )
public :
e x p l i c i t L e d I n d i c a t o r ( QWidget ∗ p a r e n t = 0 ) ;
Q S t r i n g t e x t ( ) const ;
bool isTurnedOn ( ) const ;
s i g n a l s :
void s t a t e T o g g l e d ( bool ) ;
public s l o t s :
void s e t T e x t ( const QStri ng &) ;
void setTurnedOn ( bool ) ;
private :
Q S t r i n g mText ;
bool mIsTurnedOn ;
} ;
Мы определили два свойства: text типа QString для надписи, а также
turnedOn
типа bool для состояния индикатора. Специальные слова READ и WRITE
в описании свойства обозначают названия методов для установления и изменения
значения свойства. В описании второго свойства использовано слово NOTIFY для
обозначения названия сигнала, который будет сообщать об изменении свойства.
Добавим реализацию для класса:
#include #include //Радиус индикатора
const i n t cLedRadius = 7 ;
//Отступ между индикатором и надписью
const i n t c L e d S p a c i n g = 5 ;
L e d I n d i c a t o r : : L e d I n d i c a t o r ( QWidget ∗ p a r e n t ) : QWidget ( p a r e n t ) ,
mIsTurnedOn ( f a l s e ) //Инициализируем начальным значением!
{
}
//Метод получения значения — свойство text
Q S t r i n g L e d I n d i c a t o r : : t e x t ( ) const
Программирование на языке С++ в среде Qt Creator