Глава 26 – Элементы со стилем

Элементы со стилем

Приобрести книгу можно на сайте ozon.ru и в электронном виде на Google Play:
Приобрести книгу о Qt и C++ на Ozon.ru Купить книгу о Qt и C++ на Goole Play

11 thoughts on “Глава 26 – Элементы со стилем

  1. Здравствуйте, Макс!
    На стр. 372 в предпоследнем абзаце Вы пишите: “Класс QStyle имеет только одного потомка – класс QCommonStyle…”, а на рис.26.1. “Иерархия классов стилей” указано два класса потомка: QCommonStyle и QProxyStyle. Поясните, пожалуйста, этот момент.

    1. Здравствуйте, Вячеслав!
      Тут имеется ввиду прямой “потомок” (класс QCommonStyle), который непосрественно унаследован от класса QStyle. Класс QProxyStyle уже наследуется от QCommonStyle.

  2. Макс, на странице 376 в листинге 26.4 в конце не помешает добавить строчку “QApplication::setStyle(pcbo->currentText());”, чтобы при запуске приложения стиль становился таким, который отображается в комбо-бокс (pcbo) при появлении окна приложения.

    1. Да, можно добавить и лучше тогда в конце конструктора дописать slotChangeStyle(pcbo->currentText()).

  3. Здравствуйте, Макс!
    В разделе “Использование каскадных стилей документа” Вы создаете стиль виджета с тремя кнопками (листинги 26.11-26.16). В файле стилей simple.qss почему-то не создается (не работает в прилжении) нужный стиль для состояния QPushButton:checked, и соответственно для QPushButton:checked:hover (листинги 26.15, 26.16). Как я полагаю применяется какой-то стандартный. Т.е. если убрать или закомментировать эти состояния в файле simple.qss ничего не меняется (с другими состояниями все работает). Не могу понять почему так? Может версия Qt 5.11 не поддерживает состояние checked в стилях для QPushButton?
    P.S.: для проверки состояния checked переключаю фокус TAB-ом, кнопки при этом немного светлеют (становятся сероватыми).

    1. Здравствуйте, Вячеслав!
      В программе просто не используются состояния “checked” хоть в simple.qss они и есть. Чтобы увидеть как они работают, просто вставтьте в функцию main():
      pcmdA->setCheckable(true);
      pcmdB->setCheckable(true);
      pcmdC->setCheckable(true);

      1. Спасибо за пояснения, Макс! Проверил, всё работает. Сделал свой стиль, чтобы “поиграть” разными вариантами оформления и вставил элемент QComboBox, чтобы переключаться между стилями (применять разные стили из разных файлов). Очень интересно! Отличная возможность создавать стиль своего приложения, а самое главное простая и понятная.

  4. Макс, и еще такой момент. На стр.389 в листинге 26.14 “Изменение состояния нажатия” задается градиент с помощью rgba. Четвертый параметр rgba, это альфа-канал (степень прозрачности) и насколько я знаю он меняется от 0 до 1. Поэтому запись вида rgba(1, 1, 5, 80) не совсем корректна.
    P.S.: небольшая опечатка на стр. 384, внизу страницы описывается применение стиля к собственному классу, приведен код “background-colode: black”, правильно “background-color: black”.

    1. Прозрачность в QtCSS можно установить тремя способами.
      Вот три эквивалентных примера, которые устанавливают полупрозрачность (4-й параметр). Вы можете подставить их в пример программы
      rgba(1, 1, 5, 127) // целое число
      rgba(1, 1, 5, 0.5) // вещественное
      rgba(1, 1, 5, 50%) // в виде процентов

      P.S. “colorde:” это опечатка, должно быть “color:”.
      Спасибо

      1. Спасибо! Проверил, все варианты дают одинаковый результат (единственное, 127 – это не совсем половина (0,5, 50%), как я полагаю, но глаз, естественно, этого не поймет).

Leave a Reply

Your email address will not be published.

Please reload

Please Wait