Russian Qt Forum

Qt => Qt Embedded => Тема начата: xintrea от Январь 06, 2014, 22:43



Название: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: xintrea от Январь 06, 2014, 22:43
Пишу кроссплатформенное приложение (PIM-менеджер)

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

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

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

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


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: kambala от Январь 06, 2014, 23:48
установить размер шрифта документа побольше


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: xintrea от Январь 07, 2014, 02:21
установить размер шрифта документа побольше

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


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: kambala от Январь 07, 2014, 02:51
метод zoomIn() тоже не то?

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


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: gil9red от Январь 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);
}
 


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: xintrea от Январь 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 и размер шрифта - это неотъемлемый атрибут инструментов форматирования.


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: _OLEGator_ от Январь 07, 2014, 20:56
QTextEdit обладает скудным функционалом, в таких случаях лучше переходить на QWebView.
Тем более нужный метод доступен сразу из коробки:
Код
C++ (Qt)
void QWebView::setTextSizeMultiplier ( qreal factor )


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: xintrea от Январь 07, 2014, 21:32
QTextEdit обладает скудным функционалом, в таких случаях лучше переходить на QWebView.
Тем более нужный метод доступен сразу из коробки:
Код
C++ (Qt)
void QWebView::setTextSizeMultiplier ( qreal factor )

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


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: xintrea от Январь 07, 2014, 21:33
QTextEdit обладает скудным функционалом, в таких случаях лучше переходить на QWebView.
Тем более нужный метод доступен сразу из коробки:
Код
C++ (Qt)
void QWebView::setTextSizeMultiplier ( qreal factor )

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


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: UNION labs от Май 29, 2014, 11:24
xintrea, здравствуйте.

Столкнулся с этой же проблемой, удалось ли вам найти какое-нибудь решение этой проблемы?


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: Dimka Novikov от Декабрь 29, 2014, 15:51
Если кому-нибудь в будущем понадобится, то я вот как решил этот вопрос - https://github.com/dimkanovikov/ScalableWrapper


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: __Heaven__ от Декабрь 29, 2014, 16:36
Если кому-нибудь в будущем понадобится, то я вот как решил этот вопрос - https://github.com/dimkanovikov/ScalableWrapper
Цель достигнута, но при этом увеличивается и краешек виджета (см. аттач)


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: Dimka Novikov от Декабрь 29, 2014, 16:50
Да, тут есть артефакт. Но для меня на данный момент это не очень критично (даже вообще не критично), поэтому пока не разбирался, что с этим можно сделать и нужно ли это вообще.


Название: Re: Как для QTextEdit установить относительное маштабирование содержимого? (+25%)
Отправлено: Dimka Novikov от Декабрь 29, 2014, 17:23
А вообще так можно масштабировать любой виджет наследник QAbstractScrollArea, просто мне нужен был именно QTextEdit с сохранением его контекстного меню...