Шаг 252.
Библиотека Qt.
Создание собственных стилей

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

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

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

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

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

    В большинстве случаев вам не понадобится больше информации, чем предоставляется классом 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.




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