Саммерфилд Марк
Шрифт:
Мы переопределяем в Ticker четыре обработчика событий, с тремя из которых мы до сих пор не встречались: timerEvent, showEvent и hideEvent.
Теперь давайте рассмотрим реализацию:
Конструктор инициализирует смещение offset значением 0. Координата x начала вывода текста рассчитывается на основе значения offset. Таймер всегда имеет ненулевой идентификатор, поэтому мы используем 0, показывая, что таймер еще не запущен.
Функция setText ycтaнaвливaeт oтoбpaжaeмый тeкcт. Oнa вызывaeт update для выдачи запроса на перерисовку и updateGeometry для уведомления всех менеджеров компоновки, содержащих виджет Ticker, об изменении идеального размера.
Функция sizeHint возвращает в качестве идеального размера виджета размеры области, занимаемой текстом. Функция QWidget::fontMetrics возвращает объект QFontMetrics, который можно использовать для получения информации относительно шрифта виджета. В данном случае мы определяем размер заданного текста. (В первом аргументе функции QFontMetrics::size задается флажок, который не нужен для простых строк, поэтому мы просто передаем 0.)
Функция paintEvent отображает текст при помощи функции QPainter::drawText. Она использует функцию fontMetrics для определения размера области, занимаемой текстом по горизонтали, и затем выводит текст столько раз, сколько необходимо для заполнения виджета по всей его ширине, учитывая значение смещения offset.