Присвоение классу параметра
QGraphicItem, scene, наследование
Здравствуйте. С похожим вопросом обращался, но не допер. На картинке слева класс Plane, и унаследованные от него классы Have, Satellite и пр. Они изображены на сцене. Необходимо в сцену добавить линию, соединяющей объекты как на рисунке (количество линий и объектов может изменяться).
Справа на фото код, попытка реализации. Возвращаю список объектов класса Plane на сцене и хочу проверить их как раз на наличие такого параметра, который и будет указывать с кем провести линию
Ввёл переменную NumberClass в классе Plane и присвоил ей значение 1, и пытался изменить ее значение в унаследованных классах (например в Have изменил ещё на 2), но в возвращаемом списке объектов Plane всем объектам возвращалась 1.
Есть вариант присвоить переменную только унаследованным классам, но тогда придётся отдельно создавать список объектов на сцене по каждому такому классу, а это не очень удобно.
Так вот, каким способом в классе Plane задать параметр, а потом изменить его в унаследованных классах, так чтобы потом в списке объектов на сцене объектам возвращались свои измененные значения?
Do you like it? Share on social networks!
- Last comments
- AKApril 1, 2025, 11:41 a.m.Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Now discuss on the forum
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Добрый день.
На словах всё верно сказано, есть базовый класс, у которого есть метод, который вернёт тип объекта. А в наследованных классах данный тип или номер будет переопределён. Лучше это конечно не публичной переменной делать, а через метод, а переменная должна быть приватной. Ну и с проверкой идея правильная.
Но нужно смотреть реализацию самих классов. Или не правильно в конструкторе тип инициализируется, или где Вы там его инициализируете. Или ещё что-то не так идёт.
Реализация такая, но переопределения нет. Думаю в конструктора класса должно типо такого:
Nave::Nave(Plane *parent)
{
NumberClass = 2;
}
Но так тоже не работает. Думаю в метод getNumberClass должен отправляться параметр.
Plane:: getNumberClass(x)
{
NumberClass = x;
return NumberClass;
}
getNumberClass(x) Будет возвращать лишь то, что Вы ему передаёте. Конечно, это не будет работать.
Если я правильно понимаю, то возвращать нужно тип объекта, который будет неким номером. Я бы сделал это следующим образом: Имеется некий базовый класс, у которого есть метод, который возвращает тип класса. Этот метод необязательно реализовывать в базовом классе, можно объявить его виртуальным без реализации. И обязательно реализовывать в наследниках. У каждого наследника реализовать данный метод так, чтобы он возвращал собственный тип класса.
BaseClass.h
BaseClass.cpp
Ну а далее наследники
FirstClass.h
FisrtClass.cpp
SecondClass.h
SecondClass.cpp
Ну и можно это в MainWindow проверить
В результате вывод qDebug() будет 0 и 1
Ambiguous overload for ‘operator <<‘ (operand types are ‘QDebud’ and ‘AllObject’)
Вывод qDebug(), а точнее ‘operator <<' класса qDebug() не поддерживает вывод для вашего самопального класса. qDebug() так-то и не обязано поддерживать информацию обо всех классах, только то, что относится к классам Qt и стандартным типам данных.