Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Январь 20, 2014, 20:04



Название: Смена/увеличение шрифта
Отправлено: Igors от Январь 20, 2014, 20:04
Добрый день

Портируемое нативное приложение использует размер шрифта 9, что явно мало, возникает необходимость хотя бы 12. Ну "рабочие окна" придется подгонять, т.к. там все рисуется руками, контролов мало или вообще нет. А вот что делать с диалогами? Они хранятся в нативных ресурсах, т.е. какие-то автоматы/пулеметы возможны. Но что и как "масштабить"? Изначально никаких растяжек/прилипалок/layot'ов нет. Как бы Вы поступили? (диалогов реально много, больше сотни)

Спасибо


Название: Re: Смена/увеличение шрифта
Отправлено: carrygun от Январь 21, 2014, 04:33
Из описания немного не понятно, в чем у Вас конкретно проблема. Вы когда меняете размер шрифта у Вас в диалогах чтото начинает разъезжаться?

Попробовал следующее:
Код
C++ (Qt)
   QFont f = a.font();
   f.setPixelSize(f.pixelSize() + 45);
   a.setFont(f);
 
Ну а далее простой вызов QMessageBox::information, результат: http://puu.sh/6smgA.png (лень заливать, и как нормально вставлять картинки по ссылкам?).


Название: Re: Смена/увеличение шрифта
Отправлено: Igors от Январь 21, 2014, 11:17
Из описания немного не понятно, в чем у Вас конкретно проблема. Вы когда меняете размер шрифта у Вас в диалогах чтото начинает разъезжаться?
Не что-то, а многое. Диалоги-то нативные и никаких лайаутов не имеют. На текущий момент я могу загрузить их как "Qt окна" (один к одному с шрифтом 9).

[/offtop]
Почти в каждом своем посте Вы сообщаете что Вам чего-то "лень" - но это совсем не симптом талантливости  :)


Название: OFF
Отправлено: Figaro от Январь 21, 2014, 12:58
Симптон знания


Название: Re: Смена/увеличение шрифта
Отправлено: carrygun от Январь 22, 2014, 04:39
Можно хоть посмотреть скриншоты? Какие нативные диалоги ломаются? ОС какая?


Название: Re: Смена/увеличение шрифта
Отправлено: Igors от Январь 22, 2014, 11:31
Можно хоть посмотреть скриншоты? Какие нативные диалоги ломаются? ОС какая?
Простейший пример поломки в аттаче. Скажите, что изменится если я сообщу Вам сколько % диалогов сломано? По-любому "много". И что в данном случае зависит от ОС? Нет идей/мыслей - нормально, у меня их тоже пока нет, но зачем месить по-пустому тратя свое и чужое время на "наводящие"?




Название: Re: Смена/увеличение шрифта
Отправлено: Igors от Январь 30, 2014, 14:52
Ну вот, и никто ничего мне не "рекомендует", не говоря уже о "настоятельно" :)  А как делается UI без Qt? Из нативных ресурсов, есть редакторы, хоть на том же Вындоуз. Здесь то же самое, непринципиальная разница в редакторе. Задача перегона с бОльшим шрифтом довольно банальна.

Вариант 0 (ноль): в редакторе увеличить размер шрифта и переделать все руками. Однако диалогов более сотни, и есть такие хорошие (айтемов эдак 400) - понятно желание хоть как-то облегчить этот процесс.

Вариант 1: механически увеличить все айтемы (и сами диалоги) по формуле x = x * 4 / 3 (под бОльший шрифт). Тут быстро выясняется что не все увеличения хороши, напр

- картинки задуманы 1:1, скалить их ничего хорошего не выходит 
- сами диалоги, если заполнены жиденько - резайз только портит
- эдиты, листбоксы - по ширине скалить не видно особого смысла

Как же "конвертнуть" по умному?

Спасибо


Название: Re: Смена/увеличение шрифта
Отправлено: Bepec от Январь 30, 2014, 14:59
Никак.
Это задача для интеллекта, а не для машинной обработки.
Ведь конечный результат должен удовлетворять пользователя :)

Так что вперёд по варианту 0.

PS а уже там можно упростить однотипные операции.


Название: Re: Смена/увеличение шрифта
Отправлено: Igors от Март 21, 2014, 12:32
Ладно, не все вопросы имеют быстрые ответы, попробуем еще раз с картинками (аттач)
Пользователю не нужно все это сайзить, нужна только возможность увеличить шрифт до 12. Сейчас все сделано в нативном редакторе без Qt, никаких layout'ов нет. Уже с шрифтом 10 начнутся перехлесты, с 11 тем более.

Очевидное предложение "давайте все перенесем в дызайнер, там сделаем лайауты как положено". Это как-то не вдохновляет хотя бы потому что картинка = максимум 5% всего лишь одного диалога из многих. Да и не очень очевидно как делать это лайаутами. Необходимость вставки множества виджетов-подкладок меня всегда раздражала.

Какие есть предложения?
Спасибо


Название: Re: Смена/увеличение шрифта
Отправлено: Bepec от Март 21, 2014, 14:28
Ну если по простому, то разделим проблемы.
1) шрифт.
2) вылезание шрифта за пределы полей.

Что тут можно сделать?
1) увеличить размер полей под максимальный  шрифт. (чтобы при максимальном размере не вылезало)
2) центровать надписи.

Но это сработает, если у вас поля имеют пространство под расширение, как на приведённом у вас рисунке.

PS но на мой взгляд тут поможет только полный передел собственности. Если без лайоутов вы себе мозг вынесете учётом пересечения полей и их перестановку с новым размером. Гораздо проще разместить всё в дизайнере с полями.


Название: Re: Смена/увеличение шрифта
Отправлено: Igors от Март 21, 2014, 18:00
Но это сработает, если у вас поля имеют пространство под расширение, как на приведённом у вас рисунке.
На приведенном не имеют. Напр "Amount", "Use Default Color", "Opaque + Transparent" и др. будут пересекать(ся). Настроить все на макс размер 12 - явно не дело, так UI будет напоминать выжженную пустыню при мелком шрифте. Напр тот же "Amount" окажется далеко от слайдера который к нему относится. Ну и сегодня 12 - завтра хз, может 13, и опять все по новой

Гораздо проще разместить всё в дизайнере с полями.
Мне почему-то не кажется это простым. Хотя вот Вам UI файл, попробуйте


Название: Re: Смена/увеличение шрифта
Отправлено: Old от Март 21, 2014, 18:09
Если диалогов больше 100 и они сложные, можно написать конвертер из нативного формата в формат Qt ui. После конвертации координаты всех виджетов будут абсолютные.
А дальше "программа" минимум, запретить диалогам менять размер и ничего в ui не трогать, или, как максимум, загружать дальше диалоги в дизайнер и руками размещать контролы в layout. Это будет гораздо проще, чем делать все с нуля.


Название: Re: Смена/увеличение шрифта
Отправлено: Igors от Март 21, 2014, 18:59
Если диалогов больше 100 и они сложные, можно написать конвертер из нативного формата в формат Qt ui. После конвертации координаты всех виджетов будут абсолютные.
А дальше "программа" минимум, запретить диалогам менять размер и ничего в ui не трогать, или, как максимум, загружать дальше диалоги в дизайнер и руками размещать контролы в layout. Это будет гораздо проще, чем делать все с нуля.
Я уже могу грузить диалоги из нативных ресурсов, они появляются как Qt окна/контролы. Для создания UI файлов можно воспользоваться QFormBuilder::save.

А вот что дальше? Если ничего не трогать, то я имею то же что и сейчас - шрифт 9 и все. Изменить что-то в дизайнере - и как воспользоваться измененным? Загрузчик нативных ресурсов делает массу всего и осведомлен о всех кастомных контролах, а QFormBuilder (или сгенерированный код) нет. 

Вообще нужен ли здесь дизайнер, лайауты  и.т.п.?  Это вроде бы правильно только потому что "так делают", но годится ли это для данной конкретной задачи? Напр воспроизвести приведенный маленький фрагмент с лайаутами в дизайнере не так уж просто. Как насчет велика?  :)


Название: Re: Смена/увеличение шрифта
Отправлено: Bepec от Март 21, 2014, 19:08
Тут нет простого выхода.
Варианты:
1) переделать под Qt и ваш загрузчик нативных ресурсов и всё иже с ним. В результате это будет разовая работа, после которой подобные действия будут в разы легче.
2) сделать велосипед с каким то умно-хитрым алгоритмом. Разовая работа, вот только нужно его разработать, оттестировать, исправить страшные баги и вновь тестировать. И вот только после этого его применить и найти недоработки и снова процесс разработки. (утрирую, но так чаще всего и бывает).
3) переделать текущие формы в старом диалоге старыми нативными средствами, али ещё как. Тоже разовая работа, но если что-то в дальнейшем нужно, придётся начинать всё с начала.


PS https://www.dropbox.com/s/w22oogwq7zwbjkl/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%202014-03-21%2020.07.29.png


Название: Re: Смена/увеличение шрифта
Отправлено: Old от Март 21, 2014, 19:11
Загрузчик нативных ресурсов делает массу всего и осведомлен о всех кастомных контролах, а QFormBuilder (или сгенерированный код) нет.  
А, так вы не хотите их переделывать в Qt-шные, а хотите использовать нативные? А в них все в абсолютных координатах?

Это вроде бы правильно только потому что "так делают"
Вы как школьник сейчас разговариваете: вроде/кто-то делает/правильно/неправильно. :)
Если ответы на мои вопросы из предыдущего абзаца "да", то не верно.

Как насчет велика?  :)
А что вы называете великом? Вы хотите написать полноценную систему для позиционирования контролов по диалогу при изменении размеров диалога/фонтов? Или так, что бы с 12 фонтом заработало и ладно?


Название: Re: Смена/увеличение шрифта
Отправлено: Igors от Март 22, 2014, 09:34
PS https://www.dropbox.com/s/w22oogwq7zwbjkl/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%202014-03-21%2020.07.29.png
Ага, вот и богатырская сила дызайнера  :) Спасибо что потратили время, только вот нужно гораздо более точное соответствие оригиналу. Красную кнопку сайзить никто не разрешал. Слайдеры и соотв edit'ы должны находиться на 1 горизонтальной линии. Если "Amount" и "Energy Reflection" были выровнены по высоте - это должно оставаться так же с любым шрифтом. И.т.д. 

2) сделать велосипед с каким то умно-хитрым алгоритмом. Разовая работа, вот только нужно его разработать, оттестировать, исправить страшные баги и вновь тестировать. И вот только после этого его применить и найти недоработки и снова процесс разработки. (утрирую, но так чаще всего и бывает).
Вот это я и хочу обсуждать (ну не вижу как раскрутиться с дызайнером)

Вы как школьник сейчас разговариваете: вроде/кто-то делает/правильно/неправильно. :)
А я и есть школьник (ну или очень хотел бы им быть  :))

А что вы называете великом? Вы хотите написать полноценную систему для позиционирования контролов по диалогу при изменении размеров диалога/фонтов? Или так, что бы с 12 фонтом заработало и ладно?
Совершенно верно, чтобы работало со шрифтами от 9 до 12. Никаких барбароссовских планов большой системы не имею  :)

А, так вы не хотите их переделывать в Qt-шные, а хотите использовать нативные? А в них все в абсолютных координатах?
Все контролы Qt, но они грузятся из нативных ресурсов, где тоже записано отношение parent-child. Поэтому с координатами все норм, но нет никаких растяжек/прилипалок.


Название: Re: Смена/увеличение шрифта
Отправлено: Bepec от Март 22, 2014, 09:36
Igors в своём репертуаре.
Гораздо проще разместить всё в дизайнере с полями.
Мне почему-то не кажется это простым. Хотя вот Вам UI файл, попробуйте

Попробовал, вот результат. Ограничений вы не привели. Вывод - вы неверно дали задачу :D Я не представляю вас в роли заказчика. Точнее представляю. В роли заказчика "я незнаю что хочу, но сделать ты должен".

PS бе бе бе.


Название: Re: Смена/увеличение шрифта
Отправлено: Old от Март 22, 2014, 09:44
Все контролы Qt, но они грузятся из нативных ресурсов, где тоже записано отношение parent-child. Поэтому с координатами все норм, но нет никаких растяжек/прилипалок.
Виджеты Qt-шные, вместо ui используется свой формат хранения диалогов, в котором нет слоев и координаты всех контролов абсолютные? Я ничего не пропустил?


Название: Re: Смена/увеличение шрифта
Отправлено: Igors от Март 22, 2014, 09:56
Попробовал, вот результат. Ограничений вы не привели. Вывод - вы неверно дали задачу :D Я не представляю вас в роли заказчика. Точнее представляю. В роли заказчика "я незнаю что хочу, но сделать ты должен".

PS бе бе бе.
Ну не надо так болезненно переживать :) Вот напр шрифт как был так и остался 9 - ведь пользователь ожидает увидеть "то что было", а у Вас уже все развалено. По поводу "плохая задача". Вот что я получил
Цитировать
заказчик: шрифт слишком мелкий, при большом разрешении почти нечитаемый. Нужна возможность установки, макс размер 12

Igors: это совсем непросто,  мне нужны время и $

заказчик: Ok, я понимаю
Поверьте, если я предложу что-то типа Вашего творчества в дызайнере - мне просто не заплатят и больше не наймут.


Название: Re: Смена/увеличение шрифта
Отправлено: Igors от Март 22, 2014, 09:59
Виджеты Qt-шные, вместо ui используется свой формат хранения диалогов, в котором нет слоев и координаты всех контролов абсолютные? Я ничего не пропустил?
Слои/табы есть. Координаты "клиентские" окна. Есть parent-child


Название: Re: Смена/увеличение шрифта
Отправлено: Old от Март 22, 2014, 10:17
Слои/табы есть.
Под слоями я подразумеваю layout'ы. Как я понял их нет.

Координаты "клиентские" окна. Есть parent-child
Понятно - абсолютные относительно родителя.

Можно попробовать при загрузке масштабировать положение и размер контролов в зависимости от размера фонта. Чем больше фонт, тем больше контролы и тем больше результирующий диалог. Коэффициенты масштабирования подобрать руками для каждого из возможных фонтов.


Название: Re: Смена/увеличение шрифта
Отправлено: Old от Март 22, 2014, 10:20
Поверьте, если я предложу что-то типа Вашего творчества в дызайнере - мне просто не заплатят и больше не наймут.
На самом деле в дизайнере можно сделать как у вас на картинке и он еще будет уметь менять размер, но времени придется потратить...


Название: Re: Смена/увеличение шрифта
Отправлено: Bepec от Март 22, 2014, 13:46
При желании можно сделать как угодно. Но никогда вы не сделаете "как было" при увеличении размера. Ибо смещаются поля, надписи, соотношение, размеры диалогов и прочее.
 
Можно сохранить только примерное, относительное месторасположение. А сделать это можно лишь зная, что куда можно перемещать, что нельзя.

Т.к. вы не можете сформировать задачу для других, эта работа целиком и полностью ложится на вас :)

PS четкое ТЗ и можно создать любой интерфейс. Нет чёткого ТЗ, как у вас всегда и бывает - нет ожидаемого вами результата :P

PPS на мой взгляд, заказчика вообще не волнует куда там что сместилось на пару пикселей. Сохранилось месторасположение контролов + ясно различимая надпись - вот результат.
Если же у вас требует соответствия шаблону - так пусть предоставят шаблон на 12 кегль.


Название: Re: Смена/увеличение шрифта
Отправлено: Igors от Март 22, 2014, 17:59
Т.к. вы не можете сформировать задачу для других,
...
Нет чёткого ТЗ, как у вас всегда и бывает
...
- так пусть предоставят шаблон на 12 кегль.
А может еще мамину сисю дать? :) Нет мыслей - не засоряйте эфир

На самом деле в дизайнере можно сделать как у вас на картинке и он еще будет уметь менять размер, но времени придется потратить...
Так вот именно - придется сделать столько подтяжек-подложек что мама не горюй. Причем все это нужно только 1 раз (дальше все статычно)

Можно попробовать при загрузке масштабировать положение и размер контролов в зависимости от размера фонта. Чем больше фонт, тем больше контролы и тем больше результирующий диалог. Коэффициенты масштабирования подобрать руками для каждого из возможных фонтов.
Как уже говорил выше, многое масштабированию не подлежит. Напр картинки/иконки. Или даже слайдеры - многие подобраны так чтобы рабочих пикселей скролла было ровно 100.

Я прикидывал так. Пример

--Slider---- Amount: ---Edit---
--Slider----    Falloff: ---Edit---

Полагаем что edit'ы фиксированы. Вцепились в Amount (он выровнен направо). Проверяем на что он напоролся слева. Ага, расстояние до слайдера стало меньше мин возможного. Значит надо двигать Amount: вправо. Это вызывает и перемещение edit'а. Вот тут момент - мы должны подвинуть и Falloff c его edit'ом - хотя сам по себе текст Falloff короткий и может вполне влезать. Ну можно напр зацепиться за то что левые края 2 edit'oв равны.

Хочу услышать больше соображений в этом направлении, и не надо смущаться что, дескать, "примитивно" и все такое - этот путь не требует никакой ручной работы что при моем раскладе огромный плюс.

Спасибо