LINUX.ORG.RU

Как не создавая объекта QPainter узнать шрифт, которым он будет выводить текст, если не вызывать setFont().

 


0

1

Как не создавая объекта QPainter узнать тот шрифт, которым он будет выводить текст, если не вызывать setFont(). То есть как узнать «дефолтный» шрифт, который будет использовать QPainter при вызове QPainter::drawText()?

Пытаюсь определить размер виджета в пикселях, который зависит от количества текста на нём, для чего мне нужен шрифт, чтобы засунуть его в QFontMetrics.

        #define FIXED_WIDTH 32
	QPainter painter (this);
	QFontMetrics fm( painter.font() ); // вот ради этого и создавался QPainter - нехорошо
	QRect r = fm.boundingRect( 0, 0, FIXED_WIDTH, 1, Qt::AlignLeft | Qt::TextWordWrap, "Text text text text ..." );
	std::cout << r.width() << ", " << r.height() << "\n";

Это работает, но этот код - ВНЕ функции paintEvent(), то есть создание QPainter здесь не совсем правильно. Но шрифт-то надо у кого-то попросить. Внутри paintEvent() весь этот код написать можно, но хочется там оставить только тупо-рисовательную часть, а не такую интеллектуальную, меняющуу состояние всего класса виджета.

★☆

Последнее исправление: kiverattes (всего исправлений: 2)

В качестве шрифта QPainter'а по дефолту будет QApplication::font()

Kosyak ★★★★
()

Это работает, но этот код - ВНЕ функции paintEvent(), то есть создание QPainter здесь не совсем правильно.

Совсем правильно. На QImage как тогда рисовать, например? Неправильно рисовать только на самих виджетах вне paintEvent(). Не парься и создавай QPainter, где тебе угодно. У него такое предназначение.

Или можно QWidget::fontMetrics().

schizoid ★★★
()

Будет использован QApplication::font(), который также можно получить так:

QFont::QFont () Constructs a font object that uses the application's default font.

m0rph ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.