На этом шаге рассмотрим понятие элементов со стилем в Qt.
Один из немаловажных аспектов при программировании с использованием библиотеки Qt — это управление видом и поведением приложения (look & feel). Ввиду того, что Qt-приложения создаются для большого числа платформ, необходим механизм для изменения их вида и поведения. Это позволяет добиться того, чтобы внешний вид приложения "не выбивался бы из колеи" при запуске в какой-либо операционной системе, и не создавалось впечатление того, что программа "чужая" на этой платформе.
В Qt внешний вид компонентов может быть свободно изменен, и это можно использовать для того, чтобы разнообразить внешний вид приложения, если вы относитесь к группе программистов, считающих стандартный вид неподходящим для своих программ. Например, при написании компьютерной игры вы наверняка захотите большей дизайнерской свободы и попробуете придать элементам управления новый вид. К изменению стиля можно прибегнуть и в том случае, когда нужно добиться того, чтобы ваши программы узнавали по внешнему виду. И это очень важно потому, что в первую очередь продается не сама программа, а ее внешний вид.
В Qt можно создать классы виджетов, которые будут иметь свой собственный облик, отличный от стандартного. Но это неудобно, т. к. каждый раз придется реализовывать новые классы и изменять исходный код. Qt предоставляет специальные классы стилей, позволяющие изменять внешний вид и поведение для любых классов виджетов. Стили программы можно изменять даже в процессе ее работы, а это значит, что пользователю можно предоставить в меню целый список стилей, чтобы он смог выбрать оптимальный для себя. Стили можно создавать самому или использовать уже готовые, встроенные в библиотеку Qt.
Возможность реализации и использования классов стилей, не зависящих от кода программы, дает большую свободу, позволяющую разделить разработку проекта, как минимум, на две команды, которые могут работать независимо друг от друга. Одна команда может работать над кодом самой программы, а другая над ее дизайном. Созданные второй командой классы или CSS-файлы стилей могут использоваться и в других Qt-проектах.
В контексте Qt стиль — это класс, унаследованный от класса QStyle и реализующий возможности для рисования рамок, кнопок, растровых изображений и т. д. Qt делает каждый виджет ответственным за свое отображение, что соответственно повышает скорость отображения и гибкость.
На рис. 1 изображена иерархия классов стилей. Класс QStyle является базовым для всех стилей.
Рис.1. Иерархия классов стилей
Класс QStyle обладает поддержкой языков с написанием справа налево: пользователю необходимо запустить приложение, указав в командной строке опцию - reverse.
Этот класс определяет целый ряд методов для изменения внешнего вида и поведения всех виджетов приложения. Для создания своего собственного стиля можно переопределить эти методы. Класс QStyle имеет только одного потомка — класс QCommonStyle, который является общим для всех классов стилей, определяя часто используемые методы. Поэтому предпочтительнее наследовать именно этот класс, а не QStyle.
Непосредственно от класса QCommonStyle наследуется целый ряд классов, называемых встроенными стилями Qt.
На следующем шаге рассмотрим встроенные стили Qt.