Russian Qt Forum
Ноябрь 22, 2024, 18:05
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
Antialiasing в QGraphicsView.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Antialiasing в QGraphicsView. (Прочитано 9631 раз)
Иволга
Чайник
Offline
Сообщений: 58
Antialiasing в QGraphicsView.
«
:
Август 04, 2016, 16:13 »
Использую тему. Всем хороша, но один минус (может, и больше, но я не нашла пока): линии нулевой толщины расплываются и утолщаются, причём везде по-разному. Мне же нужны максимально тонкие, везде одинаковые. Как это сделать? Отказаться от Antialiasing-а - не вариант.
Записан
Hrundel
Гость
Re: Antialiasing в QGraphicsView.
«
Ответ #1 :
Август 22, 2016, 13:02 »
тоньше чем 1 пиксель все-равно не будет. Антиалиас размазывает так или иначе на поворотах на 2 пикселя. А самый простой метод это опический обман - если толшина линии меньше 1 пикселя то отключают алиасинг и меняют цвет линии на более светлый. Но в значениях линия конечно получает реальный размер (eG: flaot 0.423523)
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Antialiasing в QGraphicsView.
«
Ответ #2 :
Август 22, 2016, 14:11 »
Цитата: Иволга от Август 04, 2016, 16:13
Использую тему. Всем хороша, но один минус (может, и больше, но я не нашла пока): линии нулевой толщины расплываются и утолщаются, причём везде по-разному. Мне же нужны максимально тонкие, везде одинаковые. Как это сделать? Отказаться от Antialiasing-а - не вариант.
Попробуйте рисовать линии с помощью QPen с установленным void QPen::setCosmetic( true )
Записан
Иволга
Чайник
Offline
Сообщений: 58
Re: Antialiasing в QGraphicsView.
«
Ответ #3 :
Сентябрь 27, 2016, 15:01 »
Цитировать
Попробуйте рисовать линии с помощью QPen с установленным void QPen::setCosmetic( true )
Не помогает, к сожалению.
Зато пользовательская рамка (RubberBand) рисуется так, как как надо - тонко и не размазывается. Антиалиасинг на неё почему-то не действует. Это потому, что она элемент стиля?
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Antialiasing в QGraphicsView.
«
Ответ #4 :
Сентябрь 27, 2016, 15:13 »
Цитата: Иволга от Сентябрь 27, 2016, 15:01
Не помогает, к сожалению.
И не поможет, ибо АА применяется на всю отрисовку.
Единственно можно при отрисовке линий, угол которых кратен 90, АА отключать.
Записан
Qt 5.11/4.8.7 (X11/Win)
Иволга
Чайник
Offline
Сообщений: 58
Re: Antialiasing в QGraphicsView.
«
Ответ #5 :
Сентябрь 27, 2016, 15:22 »
Цитировать
Единственно можно при отрисовке линий, угол которых кратен 90, АА отключать.
Но я рисую-то в GraphicsScene, а АА относится к GraphicsView. Даже если я передам сцене указатель на него, это вряд ли поможет, т.к. GraphicsView покажет уже полностью отрисованную сцену, как я это понимаю.
Записан
Иволга
Чайник
Offline
Сообщений: 58
Re: Antialiasing в QGraphicsView.
«
Ответ #6 :
Сентябрь 27, 2016, 15:40 »
C RubberBand ситуация обратная - какое перо ни устанавливай, она всегда рисуется в 1 пиксел, и АА на неё не действует.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Antialiasing в QGraphicsView.
«
Ответ #7 :
Сентябрь 27, 2016, 17:07 »
Цитата: Иволга от Сентябрь 27, 2016, 15:22
Но я рисую-то в GraphicsScene, а АА относится к GraphicsView. Даже если я передам сцене указатель на него, это вряд ли поможет, т.к. GraphicsView покажет уже полностью отрисованную сцену, как я это понимаю.
АА относится к QPainter
В перегруженном QGraphicsItem::paint() это и делай.
Записан
Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Antialiasing в QGraphicsView.
«
Ответ #8 :
Сентябрь 28, 2016, 07:55 »
Цитата: Иволга от Сентябрь 27, 2016, 15:01
Зато пользовательская рамка (RubberBand) рисуется так, как как надо - тонко и не размазывается. Антиалиасинг на неё почему-то не действует. Это потому, что она элемент стиля?
Так это прямоугольник, он и без всякого AA хорошо рисуется
Цитата: Иволга от Август 04, 2016, 16:13
Мне же нужны максимально тонкие, везде одинаковые.
Нет такой константы "максимально тонкие". Уменьшая альфу можно имитировать линии тоньше и тоньше, вплоть до полной невидимости. Также одна и та же линия смотрится очень разно при разных цветах фона и самой линии. Картинка "что не устраивает" была бы к месту
Пробовали поиграться с QPen::setWidthF(qreal width) давая width 0.5 или 0.75 ?
Записан
Иволга
Чайник
Offline
Сообщений: 58
Re: Antialiasing в QGraphicsView.
«
Ответ #9 :
Сентябрь 28, 2016, 08:29 »
Цитировать
Так это прямоугольник, он и без всякого AA хорошо рисуется
А у меня ортогональная сетка, и она размазывается.
Цитировать
Нет такой константы "максимально тонкие". Уменьшая альфу можно имитировать линии тоньше и тоньше, вплоть до полной невидимости.
"Максимально тонкие" - значит, 1 пиксел (тоньше быть не может), без альфы и везде одинаково.
Цитировать
Картинка "что не устраивает" была бы к месту
Прикрепила. Фиолетовые линии должны быть в 1 пиксел, а их размазывает на 2.
Цитировать
Пробовали поиграться с QPen::setWidthF(qreal width) давая width 0.5 или 0.75 ?
Попробовала. Не помогает.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Antialiasing в QGraphicsView.
«
Ответ #10 :
Сентябрь 28, 2016, 09:33 »
Цитата: Иволга от Сентябрь 28, 2016, 08:29
А у меня ортогональная сетка, и она размазывается.
Если линии только вертикальные и горизонтальные - то выключите АА, отрисуйте их с толщиной 1 пиксель, а затем, если надо, опять включите АА. Если чем-то не устраивает - поясните почему "это не выход"
Цитата: Иволга от Сентябрь 28, 2016, 08:29
"Максимально тонкие" - значит, 1 пиксел (тоньше быть не может), без альфы и везде одинаково.
В программировании не все согласуется с житейским здравым смыслом, напр
Код
C++ (Qt)
if
(
a
!=
a
)
{
// такого быть не может !!
..
Очень даже может, да еще и разными способами
Записан
Иволга
Чайник
Offline
Сообщений: 58
Re: Antialiasing в QGraphicsView.
«
Ответ #11 :
Сентябрь 28, 2016, 09:47 »
Цитировать
Если линии только вертикальные и горизонтальные - то выключите АА, отрисуйте их с толщиной 1 пиксель, а затем, если надо, опять включите АА. Если чем-то не устраивает - поясните почему "это не выход"
Собственно, это мне уже предложили выше (с перегрузкой paint()), буду пробовать.
Записан
Иволга
Чайник
Offline
Сообщений: 58
Re: Antialiasing в QGraphicsView.
«
Ответ #12 :
Сентябрь 28, 2016, 10:34 »
Цитировать
В перегруженном QGraphicsItem::paint() это и делай.
Помогло. Спасибо.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...