Как сделать шрифт с засечками по умолчанию для QWebView/QWebPage?

Используя PyQt4, я создаю QWebView, а затем загружаю его с помощью метода setHtml(). HTML отображается правильно в большинстве случаев, но всегда с использованием шрифта без засечек по умолчанию.

Когда идентичный простой текст HTML загружается внешним браузером, например. Firefox, он отображается шрифтом с засечками по умолчанию. Я бы хотел, чтобы веб-просмотр делал то же самое.

Я прочитал документ для QWebView, QWebPage и QWebSettings и не вижу способа установить «стандартный» или «пропорциональный» шрифт по умолчанию, сравнимый с настройкой предпочтений браузера. Я просмотрел QStyleSheets, но они, похоже, не применимы к QWebView/WebPage.


person user405    schedule 27.01.2012    source источник
comment
Из любопытства, почему бы не добавить немного CSS в содержимое? Что-то такое простое, как <style>body{font:serif}</style>, должно помочь...   -  person John Chadwick    schedule 27.01.2012
comment
Для HTML-документов, редактируемых этим приложением, существует стандарт, согласно которому они не указывают шрифт или семейство шрифтов, но по умолчанию используют пропорциональный шрифт. Таким образом, пользователь всегда может контролировать просмотр через настройки браузера. Чего я не могу понять, так это того, как сделать настройки браузера эквивалентными QWebPage.   -  person user405    schedule 27.01.2012


Ответы (2)


Чтобы установить шрифт по умолчанию для всех веб-страниц, используйте QWebSettings для изменения семейство шрифтов для StandardFont и изменить размер шрифта для DefaultFontSize:

settings = QtWebKit.QWebSettings.globalSettings()
settings.setFontFamily(QtWebKit.QWebSettings.StandardFont, 'Times New Roman')
settings.setFontSize(QtWebKit.QWebSettings.DefaultFontSize, 12)
person ekhumoro    schedule 27.01.2012
comment
То же самое не работает, если html содержит неопределенное семейство шрифтов, например. p{font-family:xyz}.. В этом случае веб-страница не использует шрифт по умолчанию, почему? - person Ashish; 23.10.2012
comment
@Ашиш. Извините - я не знаю. Однако другие люди могут это сделать, поэтому вам следует задать новый вопрос. - person ekhumoro; 23.10.2012

В QWebSettings есть все, что вам нужно:

enum FontFamily { StandardFont, FixedFont, SerifFont, SansSerifFont, CursiveFont, FantasyFont }
void setFontFamily ( FontFamily which, const QString & family )

Я не проверял, но чего вам не хватает? Возможно, вы захотите взглянуть на веб-браузер Arora на основе Qt Webkit.

person Dan Milburn    schedule 27.01.2012
comment
Неа. setFontFamily устанавливает конкретное имя шрифта, которое будет использоваться для общего FontFamily, например. когда я печатаю запрос fontFamily(QWebSettings.SerifFont), я получаю Times New Roman. Я могу вызвать setFontFamily(QWebSettings.SerifFont,Palatino) и альт, fontFamily отзовется в Palatino. Большой возглас — веб-страница по-прежнему отображается с использованием шрифта SansSerifFont по умолчанию. Вопрос в том, как заставить QWebPage отображать с использованием SerifFont, а не SansSerifFont. - person user405; 27.01.2012
comment
...Я должен сказать, я думаю, что проблема в этом, я могу ошибаться (я часто ошибаюсь) - person user405; 27.01.2012
comment
Я могу упустить что-то очевидное, но не могли бы вы просто установить шрифт для SansSerifFont? - person Dan Milburn; 27.01.2012
comment
ооо -- установите для шрифта sansSerifFont значение Palatino -- боже мой, это разрешено? мой компьютер может взорваться - подождите, я попробую... - person user405; 27.01.2012
comment
Неа. Я сделал settings.setFontFamily(QWebSettings.SansSerifFont,QString(Palatino)) и прочитал его с помощью settings.fontFamily, и это не имело значения. Я также сделал QWebSettings.globalSettings().setFontFamily(QWebSettings.SansSerifFont,QString(Palatino)). Отображаемая страница не изменилась, все еще без засечек. - person user405; 27.01.2012
comment
Поэтому на всякий случай, если есть какие-то проблемы с семейством Palatino, я сделал self.settings.setFontFamily(QWebSettings.SansSerifFont,self.settings.fontFamily(QWebSettings.SerifFont)), то есть взял семейство по умолчанию из Serif (которое Times New Roman) и установите его на SansSerif. Без изменений. - person user405; 27.01.2012
comment
Следуя другой строке: QWebPage, несомненно, использует QPainter для рендеринга, а QPainter имеет шрифт. Однако QPainter недоступен из QWebPage или QWebView. Вы можете получить/установить renderHints QPainter, но они только указывают, как отображается шрифт, например. сглаживание. Не сам шрифт. - person user405; 28.01.2012
comment
Спасибо за совет и ссылку на Arora. Это большая программа, но я нашел диалоговое окно настроек, в котором они показывают QFontDialog и сохраняют имя семейства и размер в метке standardLabel. На этом след обрывается, я не смог найти, где они что-то делали с этим ярлыком. - person user405; 28.01.2012
comment
@user405. Вы видели мой ответ? Это полностью решает вашу проблему. - person ekhumoro; 28.01.2012