Создание собственных стилей

   
На этом шаге рассмотрим создание собственных стилей в Qt.

   
Каждый виджет имеет указатель на объект стиля QStyle. Его можно получить вызовом метода QWidget::style(). Виджеты вызывают методы QStyle в различных ситуациях: при наступлении событий мыши, при событиях перерисовки, при вызове метода sizeHint() менеджером компоновки и т. д.

   
Собственные стили обычно создаются наследованием встроенного стиля Qt и перезаписью некоторых методов. Поэтому прежде чем реализовывать свой собственный стиль, нужно решить, какой из классов стилей унаследовать. Можно унаследовать и сам класс QStyle, переопределив необходимые методы. Но это потребует гораздо больше усилий, чем при наследовании класса, уже обладающего необходимыми свойствами. Воспользовавшись подобным классом, вам потребуется перезаписать лишь несколько методов, в которых будут реализованы все необходимые отличия.

   
Класс QStyle — это абстрактный класс, который является интерфейсом для реализации стилей. Для рисования элементов управления вам, в основном, придется иметь дело со следующими методами, определяемыми классом QStyle:

  • drawPrimitive() — предназначен для рисования простых элементов управления;
  • drawControl() — служит для рисования элементов управления;
  • drawComplexControl() — обрабатывает рисование составных элементов управления.

   
Каждый из указанных ранее методов для рисования принимает специальный идентификатор, который сообщает о том, что должно быть сделано. Для передачи дополнительной информации предусмотрен параметр QStyleOption. Все данные этого класса определены как public, т. е. можно напрямую обращаться к атрибуту:

  • version (версия) — номер версии. Если вы наследуете класс QStyleOption или унаследованный от него класс, номер следует увеличить на единицу;
  • type (тип) — целочисленный идентификатор типа;
  • state (статус) — содержит информацию о состоянии виджета, например: доступен (enabled), активен (active), в нажатом состоянии (pressed) и т. д.;
  • direction (расположение) — расположение текста, по умолчанию это значение равно Qt::LeftToRight, но может принимать и значение Qt::RightToLeft;
  • rect (сокр. от слова прямоугольник) — прямоугольная область, необходимая для рисования элемента;
  • font (шрифт) — информация о шрифте;
  • palette (палитра) — информация о палитре.

   
В большинстве случаев вам не понадобится больше информации, чем предоставляется классом QStyleOption. Но если вы создаете не только свой собственный стиль, но и свои собственные виджеты, то, унаследовав класс QStyleOption, можете передавать любую дополнительную информацию, необходимую для ваших виджетов. Добавьте в унаследованный класс необходимые атрибуты и не забудьте позаботиться о типе и версии. Например:

class MyStyleOptionProgress : public QStyleOption {
      enum {Type = SO_ProgressBar};
      enum {Version = 1};
      int nMaximum;
      int nMinimum;
      int nProgress;
      QString str;
      Qt::Alignment textAlignment;
};

   
На следующем шаге рассмотрим методы рисования простых элементов управления в Qt.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий