QGraphicsItem change color
Здравствуйте. Помогите мне пожалуйста понять как правильно обратиться к item на сцене и изменить ей цвет. Мне это нужно для расскраски графа. Вот мой проект: https://github.com/Allyans3/PaintGraph .
По нажатии на кнопку должен изменяться цвет предмета на сцене.
Также у меня есть список вершин QList<Node*> nodes; доступ к которому есть через scene->nodes. Помогите прошу.
2
94
Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Последние комментарии
- AK1 апреля 2025 г. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VP9 марта 2025 г. 16:14Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМ22 ноября 2024 г. 21:51Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Сейчас обсуждают на форуме
- МА1 апреля 2025 г. 16:210ff763fe-4e50-455d-a3a6-5699c243b1a5_17_44_22_1.xml
- f15 февраля 2025 г. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
Добрый день!
Вы можете использовать метод setBrush() , чтобы поменять кисть, которой отрисовывали. Но я бы ещё порекомендовал наследоваться от QAbstractGraphicsShapeItem и переопределить метод paint, тогда при переопределении некоторых специально для этого назначенных переменных сможете свободно делать отрисовку в данном классе.
P/S/ Программный код пожалуйста добавляйте через специальное диалоговое окно.
Я наследовал класс. И теперь когда я пытаюсь менять цвет, то он не меняеться.
И я еще заметил что в qDebug выводит то что моя вершина имеет черный цвет хотя она красная.
Ну вот вы выставляете некотроый цвет в методе paint
Предусмотрите логику и внешний метод, который будет устанавливать вам необходимый цвет для этой части кода, а то так вызов метода setBrush() в mainwindow.cpp бесполезен получается.
а почему вершина по дефолту черная хотя цвет у нее красный?
Мне бы просто какой-то живой пример что бы я понял. Этот метод должен быть не в классе mainwindow? этот метод должен быть paint()?
потому, что метод brush() объекта класса Node и метод объекта класса brush() QPainter - это методы разных объектов. painter используется внутри Node.
Вы путаете понятия и смешиваете в одно два разных объекта. А то, что brush() возвращает чёрный - всё правильно. вы его никогда не устанавливали в красный
в принципе... думаю, что не обязательно создавать метод. Можно использовать тот же самый brush(), но внутри метода paint(), а цвет снаружи устанавливать через setBrush
т.е. мне надо опять вызвать метод paint() из класса mainwindow что бы изменить цвет или нужно как то переопределить метод paint?
и если мне надо будет вызывать метод пейнт то каким образом мне указать какому итему мне надо будет менять цвет
Практически.
Вы можете вызвать setBrush() в mainwindow.cpp, где пытаетесь поменять цвет, а потом вызвать update() на графической сцене. Метода paint() вызывается автоматически, при этом его нельзя вызывать вручную в силу архитектуры графической сцены и графических объектов.
А в методе paint|()
поменяйте ту строку, на которую я вам указывал, не такую
Думаю, что тогда Вам станет понятно, как это работает.
Вы в mainwindow в том куске кода, что приводили в самом начале очевидно уже знаете, какой именно item вам нужен, нужно просто вызвать метод setBrush на нём и вызывать update на графической сцене, там само всё перерисуется как надо. paint - это внутренний метод, его извне вызывать нельзя. (в том плане, что он автоматически вызывается сам в стекк вызовов методов в графической сцене, просто извне его вручную не вызывают никогда, это и в документации сказано)
Хорошо. Сейчас попробую
Спасибо вам большое). Теперь цвет меняеться. А если мне надо изменить цвет ребра (там setPen) то так же?
В данном случае можно также.
Просто у вас собственная логика отрисовки в методе paint, поэтому setBrush не имел ожидаемого эффекта. Вы устанавливали кисть, но не использовали её.
Спасибо Вам большое за помощь. Теперь все работает и я понял как метод paint устроен.
Пожалуйста, будут ещё вопросы, не стесняйтесь их задавать на форуме. Я стараюсь отвечать, когда есть свободное время, да и другие более опытные пользователи сайта тоже отвечают по возможносьт, ну и сами не стесняйтесь помогать другим.
Хорошо)