QGraphicsItem change color
Здравствуйте. Помогите мне пожалуйста понять как правильно обратиться к item на сцене и изменить ей цвет. Мне это нужно для расскраски графа. Вот мой проект: https://github.com/Allyans3/PaintGraph .
По нажатии на кнопку должен изменяться цвет предмета на сцене.
Также у меня есть список вершин QList<Node*> nodes; доступ к которому есть через scene->nodes. Помогите прошу.
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
d
- dsfs
- 26 апреля 2024 г. 10:56
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
d
- dsfs
- 26 апреля 2024 г. 10:35
C++ - Тест 001. Первая программа и типы данных
- Результат:73баллов,
- Очки рейтинга1
Последние комментарии
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко5 февраля 2024 г. 8:50
EVA25 декабря 2023 г. 17:30
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
DA
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
Dr Gangil Academics20 апреля 2024 г. 13:45
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев14 апреля 2024 г. 8:35
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
Добрый день!
Вы можете использовать метод 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 устроен.
Пожалуйста, будут ещё вопросы, не стесняйтесь их задавать на форуме. Я стараюсь отвечать, когда есть свободное время, да и другие более опытные пользователи сайта тоже отвечают по возможносьт, ну и сами не стесняйтесь помогать другим.
Хорошо)