Russian Qt Forum
Июнь 22, 2024, 18:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)  (Прочитано 11363 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Январь 06, 2014, 22:43 »

Пишу кроссплатформенное приложение (PIM-менеджер)

Проблема в том, что на разных системах с разными DPI текстовые записи в QTextEdit выглядят по-разному.

В Windows - достаточно крупно, читать удобно. В десктоповом Linux - помельче, а в Android вообще мелко.

То есть, хочу понять, как изменить общий масштаб всего что рендерится в QTextEdit.

Вызовы типа resize() просто меняют размеры виджета QtextEdit. А нужно понять, как увеличить масштаб содержимого.
Записан

Собираю информацию по крупицам
http://webhamster.ru
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4733



Просмотр профиля WWW
« Ответ #1 : Январь 06, 2014, 23:48 »

установить размер шрифта документа побольше
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Январь 07, 2014, 02:21 »

установить размер шрифта документа побольше

Нельзя трогать форматирование текста. Надо просто увеличить масштаб всей области.
Записан

Собираю информацию по крупицам
http://webhamster.ru
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4733



Просмотр профиля WWW
« Ответ #3 : Январь 07, 2014, 02:51 »

метод zoomIn() тоже не то?

http://lists.qt.nokia.com/public/qt-interest/2010-May/023498.html может поможет
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Январь 07, 2014, 11:20 »

установить размер шрифта документа побольше

Нельзя трогать форматирование текста. Надо просто увеличить масштаб всей области.
Вообще, оригинальные методы увеличения и уменьшения текста, и сделаны с помощью увеличения/уменьшения размера шрифта Улыбающийся

http://code.woboq.org/qt5/qtbase/src/widgets/widgets/qtextedit.cpp.html#_ZN9QTextEdit6zoomInEi
Код
C++ (Qt)
void QTextEdit::zoomIn(int range)
{
   QFont f = font();
   const int newSize = f.pointSize() + range;
   if (newSize <= 0)
       return;
   f.setPointSize(newSize);
   setFont(f);
}
void QTextEdit::zoomOut(int range)
{
   zoomIn(-range);
}
 
Записан

xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #5 : Январь 07, 2014, 20:44 »

метод zoomIn() тоже не то?

http://lists.qt.nokia.com/public/qt-interest/2010-May/023498.html может поможет

Похоже, не поможет.

Эти методы меняют исходник текста.

Предпложим, пользователь PIM-менеджера, создал запись (документ) с таким HTML-текстом:

Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:400; font-style:normal;">

<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Это строка с обычным текстом.</p>

<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt;">Это строка с увеличенным шрифтом.</span></p>

</body></html>

Теперь подумаем:

1. Пользователь, находясь под виндой, сам задал для всего документа размер 10pt, и первая строка отображается размером 10pt. Для второй строки пользователь сам указал размер 14pt, и вторая строка отображается размером 14pt.

2. Пользователь пересел на компьютер с другим экраном и и ситемным DPI и смотрит на эту запись. Он видит более мелкий текст.

3. Пользователь открыл эту запись на планшете с Андроид с мелким пикселем, и видит вообще микроскопический текст.

То есть, пользователь сам задал размеры шрифтов, и ожидает, что программа _сама_ не будет их менять. Тем более, что если и менять этим методом, то просмотренные в другой системе записи "увеличатся"/"уменьшатся" в момент просмотра, а непросмотренные - останутся прежними.

Понятно, что решение - запретить пользователю пользоваться понятием "размер шрифта" и заставить пользоваться стилями. Но это нехорошо по отношению к пользователю, ибо пользователи привыкли к MS/Libre Office и размер шрифта - это неотъемлемый атрибут инструментов форматирования.
Записан

Собираю информацию по крупицам
http://webhamster.ru
_OLEGator_
Гость
« Ответ #6 : Январь 07, 2014, 20:56 »

QTextEdit обладает скудным функционалом, в таких случаях лучше переходить на QWebView.
Тем более нужный метод доступен сразу из коробки:
Код
C++ (Qt)
void QWebView::setTextSizeMultiplier ( qreal factor )
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #7 : Январь 07, 2014, 21:32 »

QTextEdit обладает скудным функционалом, в таких случаях лучше переходить на QWebView.
Тем более нужный метод доступен сразу из коробки:
Код
C++ (Qt)
void QWebView::setTextSizeMultiplier ( qreal factor )

QWebView не поддерживается в Android.
Записан

Собираю информацию по крупицам
http://webhamster.ru
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #8 : Январь 07, 2014, 21:33 »

QTextEdit обладает скудным функционалом, в таких случаях лучше переходить на QWebView.
Тем более нужный метод доступен сразу из коробки:
Код
C++ (Qt)
void QWebView::setTextSizeMultiplier ( qreal factor )

Я вот думаю, может как-то draw() переписать. Насколько это сложно будет?
Записан

Собираю информацию по крупицам
http://webhamster.ru
UNION labs
Гость
« Ответ #9 : Май 29, 2014, 11:24 »

xintrea, здравствуйте.

Столкнулся с этой же проблемой, удалось ли вам найти какое-нибудь решение этой проблемы?
« Последнее редактирование: Май 29, 2014, 11:55 от dimkanovikov » Записан
Dimka Novikov
Гость
« Ответ #10 : Декабрь 29, 2014, 15:51 »

Если кому-нибудь в будущем понадобится, то я вот как решил этот вопрос - https://github.com/dimkanovikov/ScalableWrapper
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #11 : Декабрь 29, 2014, 16:36 »

Если кому-нибудь в будущем понадобится, то я вот как решил этот вопрос - https://github.com/dimkanovikov/ScalableWrapper
Цель достигнута, но при этом увеличивается и краешек виджета (см. аттач)
Записан
Dimka Novikov
Гость
« Ответ #12 : Декабрь 29, 2014, 16:50 »

Да, тут есть артефакт. Но для меня на данный момент это не очень критично (даже вообще не критично), поэтому пока не разбирался, что с этим можно сделать и нужно ли это вообще.
Записан
Dimka Novikov
Гость
« Ответ #13 : Декабрь 29, 2014, 17:23 »

А вообще так можно масштабировать любой виджет наследник QAbstractScrollArea, просто мне нужен был именно QTextEdit с сохранением его контекстного меню...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.178 секунд. Запросов: 22.