Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: HunteX от Май 23, 2011, 22:06



Название: QPixmap -> QGraphicsScene -> QGraphicsView
Отправлено: HunteX от Май 23, 2011, 22:06
Здравствуйте, я новичек в Qt и так получилось (как всегда :) ) - наткнулся на следующую проблему: На форме имеется QGraphicsView, на котором необходимо отобразить QPixmap. Почитал документацию, сделал вот таким образом:

Код
C++ (Qt)
scene->addPixmap(pixmap); // добавление QPixmap в QGraphicsScene
ui->graphicsView->setScene(scene); // добавление QGraphicsScene в QGraphicsView
 

После загрузки изображения, (через некоторое время) мне необходимо загрузить следующее изображение.
Конечно же, перед этим необходимо удалить старый QPixmap и очистить QGraphicsView. Я точно не знаю последовательности удаления и очистки.
Сейчас, удаляя QPixmap я получаю ошибку, видимо сцена еще ссылается на него ...

То есть последовательность действий должна быть такая:
1. Загружаю QPixmap в QGraphicsScene
2. Загружаю QGraphicsScene в QGraphicsView
3. (через некоторое время) Удаляю QPixmap, очищаю QGraphicsScene, QGraphicsView ?
4. Перехожу к п. 1

Вроде объяснил максимально ясно :)

Предположим, что QGraphicsView у меня в нескольких экземплярах - почитал про QGraphicsPixmapItem, может стоит хранить их в
QList<QGraphicsPixmapItem> и при необходимости передавать в QGraphicsView ?

Просьба не отсылать ртфм и в гугол. Спасибо!

С Уважением, Андрей.


Название: Re: QPixmap -> QGraphicsScene -> QGraphicsView
Отправлено: kambala от Май 23, 2011, 22:39
как правило, сцена и вью создаются один раз, и там же сцена привязывается ко вью. потом, при добавлении QPixmap сохраняешь указатель на полученный в результате QGraphicsPixmapItem (та даже можно просто QGraphicsItem). захотел удалить его из сцены - вызвал scene->removeItem() для сохраненного айтема и удалил его. если надо держать на сцене более одного элемента - заводишь список/словарь айтемов, или айтемы можно получать через методы items() / itemAt() сцены.


Название: Re: QPixmap -> QGraphicsScene -> QGraphicsView
Отправлено: HunteX от Май 24, 2011, 05:42
как правило, сцена и вью создаются один раз, и там же сцена привязывается ко вью. потом, при добавлении QPixmap сохраняешь указатель на полученный в результате QGraphicsPixmapItem (та даже можно просто QGraphicsItem). захотел удалить его из сцены - вызвал scene->removeItem() для сохраненного айтема и удалил его. если надо держать на сцене более одного элемента - заводишь список/словарь айтемов, или айтемы можно получать через методы items() / itemAt() сцены.
Спасибо! Буду разбираться!