Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.02.2020, 17:32   #1
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
Вопрос QPainter. Как рисовать (не заполнять) радикальный градиентом? Например линии.

Есть объект класса QPainter. Нужно рисовать им. Короче это мне нужно, что бы рисовать не карандашём, а кистью. (Пишу графический редактор)
Мaкс вне форума Ответить с цитированием
Старый 29.02.2020, 18:16   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Мaкс Посмотреть сообщение
Короче это мне нужно, что бы рисовать не карандашём, а кистью
Короче, смотрите QPainter::fillRect и QBrush
waleri вне форума Ответить с цитированием
Старый 29.02.2020, 18:20   #3
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Короче, смотрите QPainter::fillRect и QBrush
Не понятно как реализовывать.. Буду пробовать.

Последний раз редактировалось Мaкс; 29.02.2020 в 18:25.
Мaкс вне форума Ответить с цитированием
Старый 29.02.2020, 18:59   #4
Subst
Пользователь
 
Регистрация: 30.01.2020
Сообщений: 54
По умолчанию

void QPainter::setBrush(const QBrush &brush)
Sets the painter's brush to the given brush.
The painter's brush defines how shapes are filled.
See also brush() and Settings.

void QPainter::setBrush(Qt::BrushStyle style)
This is an overloaded function.
Sets the painter's brush to black color and the specified style.

это из ассистента

Qt::BrushStyle style - это стиль, в том числе может быть Градиентом.
можно создать QBrush и указать там
можно указать напрямую в перегруженном методе. В последнем случае фон будет черный.
Чтобы полностью управлять кистью - первый метод
Subst вне форума Ответить с цитированием
Старый 01.03.2020, 09:21   #5
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Цитата:
Сообщение от Мaкс Посмотреть сообщение
Например линии
Код:
void MainWindow::paintEvent(QPaintEvent* event)
{
	QPainter p(this);

	QRadialGradient gr(50,50,50);
	gr.setStops({{0.0,Qt::red},{1.0,Qt::green}});
	QBrush br(gr);
	p.setPen(QPen(br,3));
	p.drawLine(0,0,100,100);

	QMainWindow::paintEvent(event);
}
Алексей1153 вне форума Ответить с цитированием
Старый 01.03.2020, 14:11   #6
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

waleri, Алексей1153, Subst,
Я про такой градиент. Например от чёрного непрозрачного цвета до полной прозрачности.
p.jpg
Мaкс вне форума Ответить с цитированием
Старый 01.03.2020, 14:23   #7
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Мaкс, это похоже на расфокусировку. Ищи что-нибудь навроде blur, размытие изображения, алгоритм реализации
Алексей1153 вне форума Ответить с цитированием
Старый 01.03.2020, 14:26   #8
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Мaкс, это похоже на расфокусировку. Ищи что-нибудь навроде blur, размытие изображения, алгоритм реализации
Что то нашёл, пытаюсь разобраться...
http://www.prog.org.ru/topic_25589_0.html
Мaкс вне форума Ответить с цитированием
Старый 01.03.2020, 15:22   #9
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Алексей1153, Я вот так додумался сделать. Не идеально, но...
Код:
QPainter p(this);
        QPainter p(this);
        QLinearGradient gr(0, 30, 30, 0);
        gr.setStops({ {0.1,qRgba(255, 255, 255, 0)}, {0.5,Qt::black},{0.9,qRgba(255, 255, 255, 0)}});
        QBrush br(gr);
        p.setPen(QPen(br,30));

        p.drawLine(0,0,100,100);
Снимок.PNG
Мaкс вне форума Ответить с цитированием
Старый 01.03.2020, 17:40   #10
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Мaкс, осталось добавить на концах полукруги с радиальным градиентом, а также отрисовать не линию а QPainterPath - и получится как на скрине выше )

или таки всё же взять какой-нибудь OGL, найти, как там делают размытие и применить общий подход
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Windows Forms - В графическом редакторе не получается рисовать линии, фигури и текст без загрузки рисунка из файла. Runikus Помощь студентам 0 01.05.2015 23:46
работа с градиентом серого frosti Общие вопросы C/C++ 1 24.04.2012 19:59
Рисовать в своем окне линии. TwiX Win Api 3 23.10.2011 00:06
Как правильно рисовать линии на окне tumanovalex Qt и кроссплатформенное программирование С/С++ 2 27.05.2011 12:03
RichEdit: фон градиентом. Fezilk Общие вопросы Delphi 12 25.08.2009 00:33