Название: Масштабирование html а-ля Word в Qt Отправлено: Andrey_hello от Января 13, 2008, 15:07 Здравствуйте. Появилась проблема, поиск не помог.
Библиотека Qt 3.3.4 Написал классы для работы со страницами документа, браузер наследует QScrollView, класс страницы размещаемой в браузере - QTextBrowser. На главной форме размещается QComboBox по типу как в Word 500%, 200%, 100, 50 и т. д. Страницы размеры изменяют (resize), на ScrollView перераспределяются, а вот как масштабировать содержимое (html) - не представляю. Методы zoomIn() и zoomOut() для масштабирования хотябы с шагом 10% не подходят - все происходит довольно коряво. Если не найду решение придется подгонять величину масштаба под результат этих функций и написать ближайшее целое, но при таком решении о нормальном масштабировании придется забыть. Да и еще какойто косяк у методов - после zoomIn() результат zoomOut() (и наоборот) может не всегда возвращать первоначальный вид страницы. Прикреплю картинку - mainWindow, но это не проект, а сделано для тестирования моего браузера страниц. Попробовал добавлять текст в QCanvas (QCanvasText), рисовать текст QPainter-ом (drawText) - и там и там не поддерживают HTML. Может кроме просто добавления текста надо еще что с текстом или объектом, содержащим текст сотворить? QCanvas-ом можно масштабировать хорошо, но текста в виде картинки для работы (которую предоставляет QTextBrowser) не достаточно. Название: Re: Масштабирование html а-ля Word в Qt Отправлено: Mikor от Января 13, 2008, 16:18 Если комп быстрый, можно рисовать то, что 100% масштабом в QBitmap (у виджета вроде есть функция визуализации на отдельный QPaintDevice). А потом этот QBitmap resize в любой нужный размер. Правда текст будет чуток расплываться (при большом уменьшении лучше будет чтобы исходный текст был стиля Bold)
Название: Re: Масштабирование html а-ля Word в Qt Отправлено: Andrey_hello от Января 13, 2008, 18:44 Не совсем понял. Текст должен не быть картинкой, а поддерживать работу с ним, я устанавливаю текст (html) в QTextBrowser методом setText() (QTextEdit).
Кроме того QWidget не наследует QBitmap, а идет параллельной веткой иерархии наследования, поясни пожалуйст, что имелось в виду, как использовать QBitmap. Рисовать я пробовал, как уже писал на QCanvas и QPainter - и так и так html не распознается. Название: Re: Масштабирование html а-ля Word в Qt Отправлено: _govorilka от Января 14, 2008, 10:27 Посмотри исходники ассистента, там подобное реализовано. Вообще, если текст не слишком сложный (как на скринах). Проще собственный редактор замутить (например, через QGraphicsView), чем мучится с QTextBrowser/QTextEdit
Название: Re: Масштабирование html а-ля Word в Qt Отправлено: Andrey_hello от Января 14, 2008, 19:52 QGraphicsView нет в Qt3.
Название: Re: Масштабирование html а-ля Word в Qt Отправлено: _govorilka от Января 17, 2008, 07:09 Извини, не посмотрел на версию библиотеки...
Название: Re: Масштабирование html а-ля Word в Qt Отправлено: Andrey_hello от Января 18, 2008, 19:21 Все доделал кроме масштабирования непосредственно текста.
В ассистенте ничего хитрого нет, вот код: void TabbedBrowser::zoomIn() { currentBrowser()->zoomIn(); } Косяки я понял (но не как их устранить), под Windows функции zoomIn() и zoomOut() работают хорошо, но когда я свои классы и запускалку компилю под нашу МСВС (Линукс), эти функции кочеряжутся, например результат изменения масштаба в одну сторону не соответствует изменению масштаба на такое же количество шагов в другую сторону, и ещё, что хуже, при увеличении на некоторое колчество раз, функция уменьшения вообще отказывается работать! Попробую перегруженные функции, с параметром, но сомневаюсь в улучшении результата. Название: Re: Масштабирование html а-ля Word в Qt Отправлено: _govorilka от Января 18, 2008, 21:07 Мне почему-то, кажется, что проблема у тебя со шрифтами. Если есть возможность переходи на 4.x.x, систему рисования передали полностью и она стала заметно меньше косяков давать.
Название: Re: Масштабирование html а-ля Word в Qt Отправлено: BaltikS от Января 18, 2008, 23:08 Я делал когда то так, рисовал именно HTML на QCanvasView:
Код: QSimpleRichText *doc = new QSimpleRichText( text(), font() ); Удачи! Название: Re: Масштабирование html а-ля Word в Qt Отправлено: Andrey_hello от Января 19, 2008, 14:42 Спасибо, попробую. Позволит ли ещё Canvas работать с нарисованным текстом, вот в чем вопрос. Если нет (как я понимаю Canvas это всего лишь рисовалка), то наверное масштабирование сделать типа "предварительный просмотр" на Canvas, а работу с документом на TextBrowser с ограниченным масштабированием и так будет чудесно, т. к. раньше документ отображался безразмерный и вид зависел от размера рабочей области как в "Блокнот".
А переход на 4.x.x зависит не от меня, а от организации, я лично высказал предложение писать новые библиотеки на 4.x.x, а поддерживать старое ПО на 3.x.x. Шрифты от меня не должны зависеть, шрифты должны быть такие, как указал автор HTML-а, попробую побаловаться шрифтами тоже. Название: Re: Масштабирование html а-ля Word в Qt Отправлено: Andrey_hello от Января 21, 2008, 18:22 Функции zoomIn или Out с параметром (в частности ставлю цифру 2) работают покорректнее, получилось 8 шагов увеличение и 6 шагов уменьшение, с корректным возвращением к первоначальному размеру, что соответствует примерно от 33% до 200%, под каждый шаг подобрал этот процент, т. е. сделал "+" и "-" и обращение к + и - через Ctrl + колесо мыши, визуально неравномерность шагов не заметна.
Конечно далеко не идеал, но другого, кроме zoomIn() и zoomOut() для QTextBrowser-а не знаю. |