2012-06-11 4 views
3

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

Однако я не могу найти, как программно определить, является ли конкретный QFont фиксированной шириной. Есть ли такая возможность?

ответ

3

Возможно bool QFontInfo::fixedPitch() это функция, которую вы ищете:

void MyWidet::setFont (const QFont& font) 
{ 
    QFontInfo fontInfo(font); 
    if(fontInfo.fixedPitch()) 
     QWidget::setFont(font); 

    // Otherwise ignore.. 
} 
+0

+1 Это способ, которым я хотел бы сделать это. – cmannett85

+0

Спасибо, Аммар. Что меня немного смущает, так это то, что 'QFontInfo :: fixedPitch()' docs содержат 'QFont :: fixedPitch()' in * см. Также раздел *, но 'QFont' также имеет метод' setFixedPitch() '. То есть * фиксированный шаг * может быть * установлен * на шрифт ... Звучит довольно странно. –

+0

@DmitrySavchenko: 'QFontInfo' более надежно, чем' QFont'. В соответствии с документацией функции доступа QFont возвращают значения, которые были установлены, тогда как объект 'QFontInfo' возвращает значения, которые применяются к шрифту (установленный в системе шрифт), который фактически будет использоваться для рисования текста. Поэтому, даже если вы вызываете 'font-> setFixedPitch (true)', он будет соответствовать этому шрифту фактическому системному шрифту, а затем будет рисовать его. – Ammar

0

Добавить YourWidget->setStylesheet("QWidget{font: 10pt "Ubuntu";}");

Таким образом, вы можете ограничить размер виджета для 10pt и шрифт типа Ubuntu, если вы не измените его в другом месте Программным.

Смежные вопросы