Comments 12
Выглядит очень даже симпатично и сурово на старом добром QWidget (а то меня как-то QML не вдохновляет). Но:
1. Вы не думали избавиться от захардкоженных цветов? Как это будет выглядеть, если у пользователя тёмная или какая-то разукрашенная цветовая схема стоит?
2. Что-то странное творится у Вас в QvObjectDelegate::drawItemBackground — создаётся image с неизвестным содержимым и потом рисуется. У меня жуткие эффекты от этого наблюдаются. Какова цель вообще этого была? И ещё на скрине косые полосы очень прозрачные, у меня намного более яркие — с чем связано, просто в исходниках не то значение alpha градиента, что использовалось для скринов?
3. И да, стоит предупредить, что прогресс строится на основании скачки реальных данных из инета. Не у всех анлим, не все сначала смотрят код.
1. Вы не думали избавиться от захардкоженных цветов? Как это будет выглядеть, если у пользователя тёмная или какая-то разукрашенная цветовая схема стоит?
2. Что-то странное творится у Вас в QvObjectDelegate::drawItemBackground — создаётся image с неизвестным содержимым и потом рисуется. У меня жуткие эффекты от этого наблюдаются. Какова цель вообще этого была? И ещё на скрине косые полосы очень прозрачные, у меня намного более яркие — с чем связано, просто в исходниках не то значение alpha градиента, что использовалось для скринов?
3. И да, стоит предупредить, что прогресс строится на основании скачки реальных данных из инета. Не у всех анлим, не все сначала смотрят код.
1. избавиться не сложно, например опираться на палитру установленную или еще что, это уже дело вкуса. Цвета в делегате были адаптированы для того приложения, в которое пошел сей компонент, для примера не стал что-то переделывать.
2. да, забыл обновить этот файл :) в первоначальной версии рисовал полосы на картинку, а потом с нужным режимом композиции выводил на виджет. Позже переделал на безкартиночный вариант.
3. и не все читают описание к элементу наверно =) там написано: загрузка большого файла %имя_файла%, а предупреждение добавлю.
2. да, забыл обновить этот файл :) в первоначальной версии рисовал полосы на картинку, а потом с нужным режимом композиции выводил на виджет. Позже переделал на безкартиночный вариант.
3. и не все читают описание к элементу наверно =) там написано: загрузка большого файла %имя_файла%, а предупреждение добавлю.
1. Ну, да. Я о палитре и говорю :) Ну, впрочем это косметика, наверное. Просто, имхо, по-максимуму стоит опираться на стандартные цвета, либо полностью строить свою систему цветов.
3. Спасибо. Описание может быть и просто так — что должно логически происходить, но не обязательно происходит на самом деле. Я то сначала код глянул ;) Не параноик, но предпочитаю перестраховаться.
3. Спасибо. Описание может быть и просто так — что должно логически происходить, но не обязательно происходит на самом деле. Я то сначала код глянул ;) Не параноик, но предпочитаю перестраховаться.
Мне кажется, вы сделали все абсолютно неправильно, ужасно и уродливо. Это в народе называется быдлокод — когда, вместо того, чтобы разобраться в принципах работы фреймворка, лейаутах и иерархической системе View, все делается напролом.
Вы используете не настоящие кнопки, а их имитацию. Это плохо, так как, во-первых, вы делаете лишнюю работу, представьте, сколько лишней работы придется сделать при разработке большого приложения, во-вторых, у вас не работает клавиатурная навигация клавишей Tab, не так ли? Нельзя задизейблить кнопки или поменять на них текст.
Также, вы зачем-то руками считаете размеры надписей и прочего, когда в Qt есть лейауты — которые специально предназначены для этих целей.
Цвета у вас заданы жестко — значит, ваш список будет инородно смотреться при смене цветовой темы или в той же самой убунте.
Ну и наконец подход «я скопировал этот код из исходников» — тоже неправильный. Не надо копировать код — если он уже где-то написан, надо его вызвать. Если вызов этого кода извне невозможен, наверняка это сделано не просто так, а чтобы его не вызывал кто попало.
Текст «1 items», прижатый к правому краю до упора, выглядит некрасиво. Надо было оставить отступ. И надо писать 1 item, а не items.
Вы используете не настоящие кнопки, а их имитацию. Это плохо, так как, во-первых, вы делаете лишнюю работу, представьте, сколько лишней работы придется сделать при разработке большого приложения, во-вторых, у вас не работает клавиатурная навигация клавишей Tab, не так ли? Нельзя задизейблить кнопки или поменять на них текст.
Также, вы зачем-то руками считаете размеры надписей и прочего, когда в Qt есть лейауты — которые специально предназначены для этих целей.
Цвета у вас заданы жестко — значит, ваш список будет инородно смотреться при смене цветовой темы или в той же самой убунте.
Ну и наконец подход «я скопировал этот код из исходников» — тоже неправильный. Не надо копировать код — если он уже где-то написан, надо его вызвать. Если вызов этого кода извне невозможен, наверняка это сделано не просто так, а чтобы его не вызывал кто попало.
Текст «1 items», прижатый к правому краю до упора, выглядит некрасиво. Надо было оставить отступ. И надо писать 1 item, а не items.
Я отлично понимаю как работают лейауты, иерархия View и так далее. Где надо использую и их тоже.
Кто сказал что весь интерфейс строится именно так? Кнопки в данном случае не дизейблятся, если действие не доступно -> кнопки нет. Текст менять не нужно (мне не нужно было). Клавиатурная навигация, с этим да, но допилить можно.
Код взят из рабочего приложения, где проблемы с о сменой схемы нет. В примере не было задачи сделать готовый к использованию компонент, вставил и работает. Задача была показать как и что можно сделать используя разные техники.
Скопировал, вставил и переписал по себя. Метод откуда взят код paintEvent у QProgressBar, так проще понять как правильно заполняется необходимый для отрисовки класс.
Кто сказал что весь интерфейс строится именно так? Кнопки в данном случае не дизейблятся, если действие не доступно -> кнопки нет. Текст менять не нужно (мне не нужно было). Клавиатурная навигация, с этим да, но допилить можно.
Код взят из рабочего приложения, где проблемы с о сменой схемы нет. В примере не было задачи сделать готовый к использованию компонент, вставил и работает. Задача была показать как и что можно сделать используя разные техники.
Скопировал, вставил и переписал по себя. Метод откуда взят код paintEvent у QProgressBar, так проще понять как правильно заполняется необходимый для отрисовки класс.
По поводу «1 items», сверху накладывается файл перевода, в котором уже множественное число учитывается.
Практически всегда, когда делают кастомные контролы, почему то забывают, что тупо отрисовать элемент — недостаточно для того, чтобы он выглядел и вел себя, как родной.
У тех же кнопок, есть еще hover-эффекты. А про то, что у баттонов бывают еще и fade in эффекты (в частности, в семерке и висте), забыли большинство разработчиков фреймворков и контролов!!! (Qt-шники не забыли)
Прогресс бары, кстати говоря, тоже бывают анимированными.
И вот из таких мелочей складывается впечатление о чужеродности программы.
У тех же кнопок, есть еще hover-эффекты. А про то, что у баттонов бывают еще и fade in эффекты (в частности, в семерке и висте), забыли большинство разработчиков фреймворков и контролов!!! (Qt-шники не забыли)
Прогресс бары, кстати говоря, тоже бывают анимированными.
И вот из таких мелочей складывается впечатление о чужеродности программы.
Нда… до чего же проще, естественнее и совершеннее выглядит подобная реализация на qml. При том, что работает примерно с такой же скоростью.
Sign up to leave a comment.
Работа с моделями и делегатами на примере создания списка аля FireFox