![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Darvin |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 36 Регистрация: 30.11.2007 Пользователь №: 30 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Подскажите правильный общий метод решения следующей задачи.
Наследую class MyPixmap: public QPixmap //в котором добавлено дополнительное описание объекта Pixmap { ... public: //пусть пока так MyType X; //некоторое описание ... } MyPixmap::MyPixmap(const QString& filename, MyType _x):QPixmap(filename) { X=_x; } Загружаю картинку, делаю приведение типов и добавляю картинку в сцену используя стандартные функции QT. QGraphicsPixmapItem *item = scene->addPixmap((QPixmap)MyPixmap("my_file.jpg",x_value)); В сцену добавляется QPixmap, но сцена ничего не знает о новых членах(X) класса MyPixmap. Замечу, что я сознательно не стал заводить внешнюю переменную MyPixmap или расширять класс сцены, в котором для каждого QGraphicsPixmapItem, должен быть сопоставлен MyPixmap с описанием. При этом придется написать много лишнего кода, для обслуживания данного соотвествия. Хочу в любом месте программы получить доступ к членам класса MyPixmap, выполнив простое приведение типов ((MyPixmap *)(&(item->pixmap())))->X Никак не получается. Наверное это неправильно? Как сделать лучше? |
|
|
![]() |
Swappp |
![]()
Сообщение
#2
|
Студент ![]() Группа: Новичок Сообщений: 20 Регистрация: 26.11.2007 Пользователь №: 25 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Т.е. получается, что как только я создаю новый класс MyPixmap я должен создать новый класс MyScene, чтобы с ним работать, а также создать новые классы от всех классов колторые мне могут понадобиться? И это всё из-за того, что вместо приведения типов указателей выполняется копирование экземпляров? Сложность стремительно нарастает... Конечно нет. Есть такое понятие как полиморфизм ![]() Цитата void QGraphicsPixmapItem::setPixmap(const QPixmap &pixmap) { Q_D(QGraphicsPixmapItem); prepareGeometryChange(); d->pixmap = pixmap; d->updateShape(); update(); } Но QGraphicsScene создавалась с учетом того, что бы разработчик мог создавать свои классы элементов. По тому есть такой класс как QGraphicsItem, у которого есть виртульные методы. А сам QGraphicsScene имеет метод void QGraphicsScene::addItem ( QGraphicsItem * item ), который как видишь принимает указатель. Советую почитать по поводу полиморфизма книжки, например Страуструпа, но внимательно ![]() Сообщение отредактировал Swappp - 30.11.2007, 19:54 |
|
|
Darvin |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 36 Регистрация: 30.11.2007 Пользователь №: 30 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Но QGraphicsScene создавалась с учетом того, что бы разработчик мог создавать свои классы элементов. По тому есть такой класс как QGraphicsItem, у которого есть виртульные методы. А сам QGraphicsScene имеет метод void QGraphicsScene::addItem ( QGraphicsItem * item ), который как видишь принимает указатель. Советую почитать по поводу полиморфизма книжки, например Страуструпа, но внимательно ![]() OK! Попробую с этого боку. Спасибо за оперативность! |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 30.6.2025, 12:58 |