Создание Стиля Интерфейса Qt На Примере Таблицы

Как известно, Qt предлагает разработчикам практически неограниченные возможности по созданию интерфейсов.

В большинстве случаев, если вы используете стандартные виджеты, внешний вид вашего приложения (и элементов его интерфейса) будет соответствовать внешнему виду вашей операционной системы.

Для этого в Qt есть система так называемых стилей — классов, отвечающих за отрисовку стандартных элементов интерфейса.

В этой статье мы попробуем создать свой стиль и применить его к простому приложению, чтобы получить красивую таблицу на основе виджетов.

QTableWidget .



Теоретическая часть

Итак, начнем с теории.

В Qt есть абстрактный класс.

QStyle , отвечающий, как нетрудно догадаться, за стилизацию приложения.

От него наследуется ряд классов ( QWindowStyle , QMacStyle и т. д.), которые представляют собой стили, имитирующие стандартный внешний вид операционной системы.

Сделаем свой стиль для приложения по их образу и подобию.

Qt требует, чтобы пользовательские стили не наследовались напрямую от QStyle , но из одного из его классов-потомков.

В документации рекомендуется выбрать наиболее близкий к желаемому стиль системы и изменить его под свои нужды.

Мы унаследуем наш класс от не менее абстрактного, чем QStyle , сорт QCommonStyle .

Как рисовать элементы внутри стиля? Сорт QStyle имеет набор функций, имена которых начинаются со слова рисовать :

  • DrawComplexControl()
  • DrawControl()
  • drawItemPixmap()
  • drawItemText()
  • рисоватьПримитив()
Каждый из них выполняет свою небольшую часть работы по рендерингу элементов.

DrawComplexControl() используется для рисования составных виджетов, то есть тех, которые содержат несколько других виджетов.

Примером является QSpinBox , который, как нетрудно догадаться, реализует обычный SpinBox и состоит из поля ввода и двух маленьких кнопок:

Создание стиля интерфейса Qt на примере таблицы

DrawControl() рисует стандартные виджеты, такие как кнопки и поля ввода.

рисоватьПримитив() рисует так называемые примитивные элементы, например, рамки.

drawItemPixmap() И drawItemText() имеют вполне понятные имена и делают именно то, что от них можно ожидать.

Подробные описания всех функций, а также их аргументов очень легко найти в документации Qt, поэтому я не буду на этом останавливаться.

В нашем примере мы присвоим элементу стиль QTableWidget , который представляет собой обычную таблицу.

Стили для остальных элементов выполняются точно так же.



Начинать

Прежде всего, давайте создадим новый класс C++.

При создании класса Qt услужливо предлагает нам написать его имя, а также имя класса, от которого мы хотим наследовать.

Назовем это для простоты мой стиль и указать наследование от QCommonStyle .

После этого Qt создаст для нас пару файлов (.

h и .

cpp), в которых для начала мы хотим получить что-то вроде этого: myStyle.h

   

#include <QCommonStyle> class myStyle : public QCommonStyle {

Теги: #стили #Qt #C++ #программирование #интерфейсы #программирование #C++ #Qt
Вместе с данным постом часто просматривают: