Название: QPixmap -> QGraphicsScene -> QGraphicsView Отправлено: HunteX от Май 23, 2011, 22:06 Здравствуйте, я новичек в Qt и так получилось (как всегда :) ) - наткнулся на следующую проблему: На форме имеется QGraphicsView, на котором необходимо отобразить QPixmap. Почитал документацию, сделал вот таким образом:
Код
После загрузки изображения, (через некоторое время) мне необходимо загрузить следующее изображение. Конечно же, перед этим необходимо удалить старый 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() сцены. Спасибо! Буду разбираться! |