МихаилллМаусым 11, 2019, 3:01 Т.Ж.
Как в QGraphicsScene стирать старый рисунок при рисовании нового рисунка поверх старого рисунка
Добрый день.
При рисовании в QGraphicsScene непрозрачным цветом, я рисую поверх старого рисунка. При рисовании прозрачным цветом, прозрачный цвет не виден, он остается под старым рисунком(наверно). Как при рисовании стирать старый рисунок и показывать новый?
Рисую как в статье: Qt/C++ - Урок 021. Рисование мышью в Qt
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
Г
- Геній
- Қыр. 13, 2024, 10:46 Т.Қ.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:66ұпай,
- Бағалау ұпайлары-1
t
- torgaev_2024
- Қыр. 8, 2024, 4:20 Т.Қ.
C++ - Тест 001. Первая программа и типы данных
- Нәтиже:33ұпай,
- Бағалау ұпайлары-10
Соңғы пікірлер
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
ВР
Linux жүйесінде файлдарды қалай көшіруге болады Screenshot_20240802-065123.png
Влад РусоковТам. 2, 2024, 11:47 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоАқп. 5, 2024, 12:50 Т.Қ.
Енді форумда талқылаңыз
Evgenii LegotckoiМаусым 25, 2024, 1:11 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCTМаусым 25, 2024, 11 Т.Ж.
BlinCTМамыр 5, 2024, 3:46 Т.Қ.
Evgenii LegotckoiМамыр 3, 2024, 12:07 Т.Ж.
Добрый день.
Давайте для начала определимся, что значит рисовать прозрачным цветом? Если вы рисуете каким-то цветом и он прозрачный, то это одно. А если вы стираете, или думаете что стираете картинку, то это совершенно другое. Это другой инструмент. Там нужно реализовывать логику для удаления части изображения.
И зачем вы тему добавили в PyQt5 раздел, если вопрос чисто по Qt/C++
Извините, с разделом ошибся.
Сначало я нарисовал сцен этим QPen
Потом рисую этим QPen
Там , где я не рисовал сплошным цветом, виден цвет QColor(255, 0, 0, 10), но там где рисовал Qt::green, там не виден QColor(255, 0, 0, 10).
И если много раз провести на одном месте QColor(255, 0, 0, 10), то прозрачность меняется в сторону уменьшения прозрачности, видимо цвета накладываются друг на друга.
Мне нужно удолять старый рисунок под QPen и рисовать новый. Скажите пожалуйста, как это сделать.
Это значительно сложнее будет. Я могу вам подсказать направление.
По поводу создания инструментов, типо карандаш, ластик, линия или ещё что-то можете посмотреть статью о векторном редакторе . Там есть пара инструментов - линии и квадраты, можете посмотреть идеологию, как это там сделано. В качестве абстрактного примера.
Не получится разбить на много объектов, так как при загрузке загружаетсяо дним объектом.
Но 2 и 3 реализуемы, хоть и с трудом.
А если рисовать с помощью QPainter , новый цвет пиксля будет заменять старый цвет?
Или может быть можно рисовать попиксельно на QGraphicsScene? И потом эти пиксели земенять новыми?
1,2,3 - это не возможные варианты, а пошаговое решение. То есть я вам предложил всего один вариант, как это можно сделать, который совмещает всю эту работу из трёх основных составляющих частей. Ну а если вы загружаете два рисунка одним объектом... что мне до конца непонятно... То тогда вам придётся разделить на два самостоятельных объекта оба рисунка и работать с ними отдельно. В общем задачка интересная сама по себе. Но вопрос реализации довольно обширный. Думаю, что пару тысяч строк кода потянет.
Хотя, конечно, можете попробовать и пискели заменять, но тоже вопрос, как вы будете определять откуда и куда заменять эти пиксели. Но это явно нехорошее решение, ведь вы потом захотите ещё и передвигать изображения, вот тогда то вам и выйдет боком это передвижение пикселей.
Я ограничусь только рисованием пикселей, поэтому не дойду то момента, когда мне выйдет боком.
Если рисовать пикселями, то по идее, ластик будет легко реализыем просто прозрачным цветом.
Скажите пожалуйста как заменить эти векторы на пиксели:
Попробовал сделать так , но получаю ошибку : QPainter::drawPoints: Painter not active. Скажите пожалуйста как это исправить
Сделал так, но рисунок не рисуется.
void paintScene::paintEvent(QPaintEvent *event) не срабатывает.
а если прописываю void paintEvent(QPaintEvent *event); к главном классе, то оно автоматом срабатывает 1 раз при загрузке приложения, 1 раз при нажатии левой кнопки мыши и больше не работает.
Попробовал для этого сделать класс наследуемый от QWidget. Но событие не вызывается при нажатии и не понятно как получать координаты
.h
.cpp
В конструкторе главной функции написал так:
Наверное в void paintScene::mousePressEvent(QGraphicsSceneMouseEvent *event) нужно добавить void widgetForPainter::paintPoint(int x1, int y1), но как это сделать?
В этом примере рисует пиксельно на QWidget и так же пиксельно стирает. Не могли бы вы мне помочь выделить нужный код, который можно добавить в свой проект?
Нашел такой класс, он нормально рисует. Можно ли его сделать не главным классом?
.h
.cpp
,
Перенес этот класс в свой код. Теперь нужно разбираться с прозрачностью.
У класса QColor в конструкторе есть установка прозрачности. Это альфа канал.
Либо через