Название: Antialiasing в QGraphicsView. Отправлено: Иволга от Август 04, 2016, 16:13 Использую тему. Всем хороша, но один минус (может, и больше, но я не нашла пока): линии нулевой толщины расплываются и утолщаются, причём везде по-разному. Мне же нужны максимально тонкие, везде одинаковые. Как это сделать? Отказаться от Antialiasing-а - не вариант.
Название: Re: Antialiasing в QGraphicsView. Отправлено: Hrundel от Август 22, 2016, 13:02 тоньше чем 1 пиксель все-равно не будет. Антиалиас размазывает так или иначе на поворотах на 2 пикселя. А самый простой метод это опический обман - если толшина линии меньше 1 пикселя то отключают алиасинг и меняют цвет линии на более светлый. Но в значениях линия конечно получает реальный размер (eG: flaot 0.423523)
Название: Re: Antialiasing в QGraphicsView. Отправлено: Old от Август 22, 2016, 14:11 Использую тему. Всем хороша, но один минус (может, и больше, но я не нашла пока): линии нулевой толщины расплываются и утолщаются, причём везде по-разному. Мне же нужны максимально тонкие, везде одинаковые. Как это сделать? Отказаться от Antialiasing-а - не вариант. Попробуйте рисовать линии с помощью QPen с установленным void QPen::setCosmetic( true ) Название: Re: Antialiasing в QGraphicsView. Отправлено: Иволга от Сентябрь 27, 2016, 15:01 Цитировать Попробуйте рисовать линии с помощью QPen с установленным void QPen::setCosmetic( true ) Не помогает, к сожалению. :(Зато пользовательская рамка (RubberBand) рисуется так, как как надо - тонко и не размазывается. Антиалиасинг на неё почему-то не действует. Это потому, что она элемент стиля? Название: Re: Antialiasing в QGraphicsView. Отправлено: GreatSnake от Сентябрь 27, 2016, 15:13 Не помогает, к сожалению. :( И не поможет, ибо АА применяется на всю отрисовку.Единственно можно при отрисовке линий, угол которых кратен 90, АА отключать. Название: Re: Antialiasing в QGraphicsView. Отправлено: Иволга от Сентябрь 27, 2016, 15:22 Цитировать Единственно можно при отрисовке линий, угол которых кратен 90, АА отключать. Но я рисую-то в GraphicsScene, а АА относится к GraphicsView. Даже если я передам сцене указатель на него, это вряд ли поможет, т.к. GraphicsView покажет уже полностью отрисованную сцену, как я это понимаю.Название: Re: Antialiasing в QGraphicsView. Отправлено: Иволга от Сентябрь 27, 2016, 15:40 C RubberBand ситуация обратная - какое перо ни устанавливай, она всегда рисуется в 1 пиксел, и АА на неё не действует.
Название: Re: Antialiasing в QGraphicsView. Отправлено: GreatSnake от Сентябрь 27, 2016, 17:07 Но я рисую-то в GraphicsScene, а АА относится к GraphicsView. Даже если я передам сцене указатель на него, это вряд ли поможет, т.к. GraphicsView покажет уже полностью отрисованную сцену, как я это понимаю. АА относится к QPainter ;)В перегруженном QGraphicsItem::paint() это и делай. Название: Re: Antialiasing в QGraphicsView. Отправлено: Igors от Сентябрь 28, 2016, 07:55 Зато пользовательская рамка (RubberBand) рисуется так, как как надо - тонко и не размазывается. Антиалиасинг на неё почему-то не действует. Это потому, что она элемент стиля? Так это прямоугольник, он и без всякого AA хорошо рисуетсяМне же нужны максимально тонкие, везде одинаковые. Нет такой константы "максимально тонкие". Уменьшая альфу можно имитировать линии тоньше и тоньше, вплоть до полной невидимости. Также одна и та же линия смотрится очень разно при разных цветах фона и самой линии. Картинка "что не устраивает" была бы к местуПробовали поиграться с QPen::setWidthF(qreal width) давая width 0.5 или 0.75 ? Название: Re: Antialiasing в QGraphicsView. Отправлено: Иволга от Сентябрь 28, 2016, 08:29 Цитировать Так это прямоугольник, он и без всякого AA хорошо рисуется А у меня ортогональная сетка, и она размазывается.Цитировать Нет такой константы "максимально тонкие". Уменьшая альфу можно имитировать линии тоньше и тоньше, вплоть до полной невидимости. "Максимально тонкие" - значит, 1 пиксел (тоньше быть не может), без альфы и везде одинаково.Цитировать Картинка "что не устраивает" была бы к месту Прикрепила. Фиолетовые линии должны быть в 1 пиксел, а их размазывает на 2.Цитировать Пробовали поиграться с QPen::setWidthF(qreal width) давая width 0.5 или 0.75 ? Попробовала. Не помогает.Название: Re: Antialiasing в QGraphicsView. Отправлено: Igors от Сентябрь 28, 2016, 09:33 А у меня ортогональная сетка, и она размазывается. Если линии только вертикальные и горизонтальные - то выключите АА, отрисуйте их с толщиной 1 пиксель, а затем, если надо, опять включите АА. Если чем-то не устраивает - поясните почему "это не выход""Максимально тонкие" - значит, 1 пиксел (тоньше быть не может), без альфы и везде одинаково. В программировании не все согласуется с житейским здравым смыслом, напрКод Очень даже может, да еще и разными способами :) Название: Re: Antialiasing в QGraphicsView. Отправлено: Иволга от Сентябрь 28, 2016, 09:47 Цитировать Если линии только вертикальные и горизонтальные - то выключите АА, отрисуйте их с толщиной 1 пиксель, а затем, если надо, опять включите АА. Если чем-то не устраивает - поясните почему "это не выход" Собственно, это мне уже предложили выше (с перегрузкой paint()), буду пробовать.Название: Re: Antialiasing в QGraphicsView. Отправлено: Иволга от Сентябрь 28, 2016, 10:34 Цитировать В перегруженном QGraphicsItem::paint() это и делай. Помогло. Спасибо. ;D |