Как работать со шрифтами (тип QFont)?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 13.09.22 12:51
Оценка:
Есть некоторый шрифт, полученный от какого-то виджета:

QFont  font1 = myWidget1.getFont();


Как из этого шрифта получить значения размеров букв (или их высоты и ширины, если это возможно), имя шрифта, признак того, является ли шрифт жирным (bold) или нет, признак того, является шрифт наклонным (italic) или нет?

Как, наоборот, при работе с другим шрифтом

QFont  font2;


задать ему значения размеров букв (или их высоты и ширины, если возможно), имя шрифта, признак того, является ли шрифт жирным или нет, признак того, является ли шрифт наклонным или нет?

В ответах желательно привести примеры кода.
1613 г. = 2024 г.
Re: Как работать со шрифтами (тип QFont)?
От: DiPaolo Россия  
Дата: 13.09.22 13:03
Оценка: 6 (1) +2
RF>В ответах желательно привести примеры кода.

#include <QDesktopServices>
#include <QUrl>

QDesktopServices::openUrl(QUrl("https://doc.qt.io/qt-6/qfont.html"));
Патриот здравого смысла
Re: Как работать со шрифтами (тип QFont)?
От: Maniacal Россия  
Дата: 13.09.22 13:06
Оценка: 4 (1)
Здравствуйте, RussianFellow, Вы писали:

RF>задать ему значения размеров букв (или их высоты и ширины, если возможно), имя шрифта, признак того, является ли шрифт жирным или нет, признак того, является ли шрифт наклонным или нет?


Фонт векторный и не имеет размеров. А вот при его отображении в своём методе paint у QPainter можно запросить текущие параметры и изменить.
Банально размер поменять через
QFont f = p->font();
f.setPointSize(m_sSettings.m_nFontSize);
p->setFont(f);


а так же у QPainter'а есть функция fontMetrics(), откуда можно узнать размер любой буквы или целой строки в пикселях.
void CObjectLabel::RecalcBoundingRect(QPainter* p, QStringList text)
{
    if (p)
    {
        m_BoundingRect = QRect();
        for (QString str : text)
        {
            m_BoundingRect = m_BoundingRect.united(p->fontMetrics().boundingRect(str));
        }
        m_BoundingRect.setHeight(m_BoundingRect.height() + p->fontMetrics().leading() * text.size());

        m_BoundingRect.setHeight(p->fontMetrics().lineSpacing() * (text.size() - 1));
...


lineSpacing() это высота строки в пикселях вместе с межстрочным интервалом.
Re: Как работать со шрифтами (тип QFont)?
От: Chorkov Россия  
Дата: 13.09.22 13:10
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Как, наоборот, при работе с другим шрифтом

RF>задать ему значения размеров букв (или их высоты и ширины, если возможно), имя шрифта, признак того, является ли шрифт жирным или нет, признак того, является ли шрифт наклонным или нет?

А с какой целью интересуетесь?
Тут вот в чем дело: разные буквы (во многих шрифтах) имеют разную ширину, причем в разных шрифтах зависимость буква->ширина разная.
Т.е. если хотите при написании текста другим шрифтом попадать в те же места что и исходный текст первым шрифтом, то задача разрешима, только если оба шрифта заранее взаимно подобраны (например, оба "моноширинные").
Отредактировано 13.09.2022 13:22 Chorkov . Предыдущая версия .
Re[2]: Как работать со шрифтами (тип QFont)?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 13.09.22 14:28
Оценка:
Здравствуйте, Chorkov, Вы писали:

C>Здравствуйте, RussianFellow, Вы писали:


RF>>Как, наоборот, при работе с другим шрифтом

RF>>задать ему значения размеров букв (или их высоты и ширины, если возможно), имя шрифта, признак того, является ли шрифт жирным или нет, признак того, является ли шрифт наклонным или нет?

C>А с какой целью интересуетесь?

C>Тут вот в чем дело: разные буквы (во многих шрифтах) имеют разную ширину, причем в разных шрифтах зависимость буква->ширина разная.
C>Т.е. если хотите при написании текста другим шрифтом попадать в те же места что и исходный текст первым шрифтом, то задача разрешима, только если оба шрифта заранее взаимно подобраны (например, оба "моноширинные").

Хочу задать в программе свой размер шрифта.
1613 г. = 2024 г.
Re[3]: Как работать со шрифтами (тип QFont)?
От: SaZ  
Дата: 14.09.22 11:05
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Хочу задать в программе свой размер шрифта.


Плохая идея. Можно сделать через QSS. Но лучше отдать всё на откуп платформе. Вдруг у пользователя нестандартные настройки масштабирования и системных шрифтов?
Если же есть места где это надо явно, то можно рисовать ручками на QPixmap и выводить уже текст как картинку.
Re[4]: Как работать со шрифтами (тип QFont)?
От: B0FEE664  
Дата: 20.09.22 09:33
Оценка:
Здравствуйте, SaZ, Вы писали:

RF>>Хочу задать в программе свой размер шрифта.

SaZ>Плохая идея. Можно сделать через QSS. Но лучше отдать всё на откуп платформе. Вдруг у пользователя нестандартные настройки масштабирования и системных шрифтов?
В хорошо сделанных программах всё можно настроить не трогая системных настроек.
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.