0 / 0 / 2
Регистрация: 26.12.2013
Сообщений: 71
|
|
1 | |
Не функциональный QGraphicsItem26.08.2017, 23:24. Показов 1158. Ответов 10
Метки нет (Все метки)
Привет, форумчане!
Собственно, проблема следующая. У меня есть сцена (QGraphicsScene), и элементы на ней (QGraphicsItem). Вообще для элементов я создал свой класс, производный от QGraphicsItem со своими параметрами. Добавил элементы на сцену. Теперь хочу их менять при нажатии ЛКМ (ограничение сделал, все нормально, только ЛКМ). Мне надо просто менять цвет заливки этих элементов на конкретный, который будет указан в ходе работы программы. Но, увы, обнаружил, что в QGraphicsItem такое не предусмотрено. Да, я знаю, что можно переопределить виртуальный QGraphicsItem::mousePressEvent(), в чем я, собственно, и видел решение проблемы, но тут опять вопрос -- как передать таким образом параметры?? Например -- цвет заливки, на который надо изменить заливку кликнутого элемента. Ведь аргумент там всего один, собственно маусИвент, и в него данные не запихнуть. Прошу помочь с решением данной траблы! Вроде бы задача простая, но, как оказалось, не решаемая.
0
|
26.08.2017, 23:24 | |
Ответы с готовыми решениями:
10
Qt 5. Включение QGraphicsItem в класс QGraphicsItem Qt:QGraphicsItem QGraphicsItem::ItemIsMovable Рисование на QGraphicsItem |
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
|
27.08.2017, 02:03 | 2 |
Нужно добавить в программу ещё что-то, ориентируясь на которое, одно и то же действие (клик мыши) приводило бы к использованию того или иного параметра (цвета заливки).
Добавлено через 4 минуты От чего, в твоей программе, зависит выбор того ли иного цвета заливки?
0
|
0 / 0 / 2
Регистрация: 26.12.2013
Сообщений: 71
|
|
27.08.2017, 02:10 [ТС] | 3 |
Есть два игрока (класс Игрок). У каждого свой цвет (выбирают селектором в отдельном окошке). Методом GetColor() его можно получить от каждого игрока. И еще фишка в том, что игроки ходят поочередно (поочередно надо цветом разным заливать QGraphicsItem). Алгоритм для очередности есть, осталось только как то цвет передавать. Ну или не только цвет, вообще -- что угодно кроме ивента.
0
|
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
|
27.08.2017, 02:16 | 4 |
Читая это описание, не могу понять: в чём, тогда, проблема? Не видя класса трудно что-то конкретное предложить... Ну, допустим, добавь в класс игрок переменную, которая будет указывать, что сейчас очередь данного игрока.
0
|
0 / 0 / 2
Регистрация: 26.12.2013
Сообщений: 71
|
|
27.08.2017, 02:18 [ТС] | 5 |
Да, да, есть такое. Так с очередностью и нет проблем. Проблема в том, что бы передать цвет в QGraphicsItem на сцене
0
|
0 / 0 / 2
Регистрация: 26.12.2013
Сообщений: 71
|
|
27.08.2017, 02:32 [ТС] | 7 |
Нет, класс Игрок -- это отдельный класс, не связанный с QGraphicsItem. А в качестве элемента, который я сую на сцену -- класс Circle, наследуемый от QGraphicsEllipseItem(потомок QGraphicsItem). В Circle реализован изначальный вид и размеры (сначала черный = без цвета). Потом объекты этого класса попадают на сцену.
Есть 2 игрока класса Игрок, которые по очереди ходят (сначала каждый выбирает свой цвет). 2 игрока -- 2 цвета. И вот есть поле из кругов, изначально пустых (черных). Игроки по очереди кликают на круги и те окрашиваются в цвет игрока (то есть, для каждой игровой сессии всего 2 цвета, т. к. 2 игрока, но они могут его себе выбрать перед игрой). И так пока кто то не соберет 3 в ряд одинаковых цвета. Уже закрашенный круг перезалить нельзя, так что тут будет уже и встречный вопрос -- как получить значение какое либо из QGraphicsItem? Всё было хорошо, когда я создал класс Circle, в нем можно все методы нужные сделать. Но как только закинул объект на сцену -- не функциональный QGraphicsItem
0
|
0 / 0 / 2
Регистрация: 26.12.2013
Сообщений: 71
|
|
27.08.2017, 02:50 [ТС] | 9 |
Да, можно. Но все равно какой то идентификатор игрока надо будет передавать. Ведь как понять, какой сейчас пошёл игрок (какой кликнул), если не передавать идентификатор, мол, игрок1 или игрок2?
0
|
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
|
27.08.2017, 03:12 | 10 |
Сообщение было отмечено Alex895623 как решение
Решение
Мы возвращаемся к тому, с чего я начал. Нужно что-то добавить, чтобы была связь между двумя классами (раз они, у тебя, никак не связаны). Самое простое - глобальная переменная (флаг), значение которой меняется в зависимости от того, чей ход. В Circle хранятся цвета двух игроков, в зависимости от значения глобальной переменной, выбирается тот или иной цвет для заливки.
Добавлено через 15 минут Если бы я такое делал, то объединил бы всё в одном классе, где были бы и игроки, и QGraphicsScene с Circle, тогда бы была связь, и было бы проще всем управлять.
1
|
0 / 0 / 2
Регистрация: 26.12.2013
Сообщений: 71
|
|
27.08.2017, 10:58 [ТС] | 11 |
Действительно, идея с общим классом, скажем, ИГРА, выглядит привлекательно. Так и сделаю. Спасибо большое за помощь!
0
|
27.08.2017, 10:58 | |
27.08.2017, 10:58 | |
Помогаю со студенческими работами здесь
11
QGraphicsItem или не он? Текст в QGraphicsItem Анимация с QGraphicsItem Qt. Не масштабировать QGraphicsItem Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |