Russian Qt Forum
Ноябрь 23, 2024, 10:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не перерисовывается пиксмап на сцене  (Прочитано 2646 раз)
OldWiseCat
Гость
« : Ноябрь 28, 2012, 15:07 »

Изучаю кьют, модифицирую пример AnimatedTiles под слайдшоу. Картинки бегают, аимируются, но не работает динамическое обовление содержимого пиксмапа. Я создал вектор пиксмапов и засунул его в сцену
   
Код:
QGraphicsScene scene(0, 0, 1280, 768);
QVector <Pixmap *> photos_thumbnails;
for (int i=0; i< queue_size; ++i)
    {
        scene.addItem(Queue->photos_thumbnails.at(i));
    }
обновлять содержимое пиксмапа собираюсь так
Код:
Pixmap *photo_thumbnail = new Pixmap(kineticPix);
        photo_thumbnail->setOffset(0, 0);
        photo_thumbnail->setZValue(i);
        photos_thumbnails[i] = photo_thumbnail;
Подскажите, может что-то надо вызывать для обовления?
   
Записан
_OLEGator_
Гость
« Ответ #1 : Ноябрь 28, 2012, 15:26 »

Ты создаешь новый пиксмап и меняешь указатель в массиве на новый, что ты ожидаешь от таких действий?
Посоветовал бы сначала учить плюсы.
Записан
OldWiseCat
Гость
« Ответ #2 : Ноябрь 28, 2012, 16:31 »

Да, действительно, надо было воспользоваться методом   void   setPixmap ( const QPixmap & pixmap ); Осталось разобраться что при этом происходит с памятью
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Ноябрь 28, 2012, 16:39 »

Я ожидаю изменения указателя, чтобы во время перерисовки пиксмапа было обращение к новой области памяти. Я не прав, признаю, и надо менять саму область памяти, но как тогда заменить то, что находится по адресу указателя? обычное присвоение *photos_thumbnails[0]= kineticPix; ругается на /usr/include/qt4/QtCore/qobject.h:333: ошибка: 'QObject& QObject::operator=(const QObject&)' is private
Вам надо вызвать QGraphicsPixmapItem::setPixmap, а от того что Вы поменяли что-то в контейнере указателей - толку никакого. Из кода что Вы привели неясно зачем вообще тот контейнер.

Код:
QGraphicsScene scene(0, 0, 1280, 768);
QVector <Pixmap *> photos_thumbnails;
for (int i=0; i< queue_size; ++i)
    {
        scene.addItem(Queue->photos_thumbnails.at(i));
    }
Не обижайтесь, но здесь каждая строка вызывает (справедливое) раздражение. Так Вы провоцируете ответы типа "учи язык", этого делать не стоит
« Последнее редактирование: Ноябрь 28, 2012, 16:45 от Igors » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.206 секунд. Запросов: 23.