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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Graphics View Framework  (Прочитано 13435 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #15 : Май 13, 2014, 11:53 »

Подскажите как через RGB задавать цвет, который я хочу отрисовывать, а то никак не могу понять.
Записан
Bepec
Гость
« Ответ #16 : Май 13, 2014, 12:16 »

QColor(R,G,B).
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #17 : Май 13, 2014, 12:18 »

Код:
 sceneImage->setPixel( (int)(scenePoint.x()), (int)(scenePoint.y()) ,QColor(R,G,B));
так?
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #18 : Май 13, 2014, 18:26 »

Код:
protected:
    void mousePressEvent(QGraphicsSceneMouseEvent* event)
    {
        QPixmap pixmap;
        addPixmap(pixmap.fromImage(*sceneImage));
     }
};

Но почему так сложно.
Т.е я беру каждый раз и перезагружаю изображение.
А проще нельзя???
Можно и нужно. Для начала тут при каждом клике мышью в сцену добавляется новый pixmap. Боюсь при таком подходе много раз вам покликать не удастся. Делайте так (тоже плохо, но гораздо лучше чем у Вас)

Код
C++ (Qt)
explicit GraphicsScene(QObject*parent = 0): QGraphicsScene(parent)
{
   sceneImage = new QImage("D:/Qt/Qt5.2.1/Tools/QtCreator/bin/Graphics/lodka.bmp");
   QPixmap pixmap;
   item= addPixmap(pixmap.fromImage(*sceneImage));
}
 
void mousePressEvent(QGraphicsSceneMouseEvent* event)
{
   QPointF scenePoint = event->scenePos();
   sceneImage->setPixel( (int)(scenePoint.x()), (int)(scenePoint.y()) ,155);
   QPixmap pixmap;
   item->setPixmap(pixmap.fromImage(*sceneImage));
}

Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #19 : Май 13, 2014, 18:28 »

Для чего создавать ненужный экземпляр QPixmap?
Код
C++ (Qt)
void mousePressEvent(QGraphicsSceneMouseEvent* event)
{
   QPointF scenePoint = event->scenePos();
   sceneImage->setPixel( (int)(scenePoint.x()), (int)(scenePoint.y()) ,155);
   item->setPixmap( QPixmap::fromImage(*sceneImage) );
}
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #20 : Май 23, 2014, 11:17 »

Скажите как можно в QGraphicsItem добавить QImage?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #21 : Май 23, 2014, 12:25 »

В QGraphicsItem - никак. В QGraphicsPixmapItem - конвертируя QImage в QPixmap и указав в конструкторе. В свой класс, унаследованный от QGraphicsItem - аналогично.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #22 : Май 23, 2014, 14:34 »

Добавляю item в сцену отображает,
но почему-то при нажатии кнопки мыши по итему метод не срабатывает(в консоль не выводит "mousePressEvent")
Подскажите что может быть неправильно?
Код
C++ (Qt)
Item::Item(QGraphicsItem *parent):
       QGraphicsItem(parent)
{
}
 
Item::~Item()
{
}
 
void Item::mousePressEvent(QGraphicsSceneMouseEvent* event)
{
 
   qDebug()<<"mousePressEvent";
   event->accept();
}
 

Код
C++ (Qt)
 
GraphicsScene::GraphicsScene(QString path, QObject*parent)
   : QGraphicsScene(parent)
{
   sceneImage = new QImage(path);
   QPixmap pixmap;
 
   Item* item = (Item *)(addPixmap(pixmap.fromImage(*sceneImage)));  
 
}
 
GraphicsScene:: ~GraphicsScene()
{
   delete sceneImage;
}
 

Код
C++ (Qt)
   GraphicsScene scene(filepath);
   QGraphicsView view(&scene);
   view.show();
 
« Последнее редактирование: Май 26, 2014, 11:33 от demaker » Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #23 : Май 26, 2014, 10:16 »

 Непонимающий
нет никаких вариантов?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #24 : Май 26, 2014, 11:39 »

Попробовал с двумя итемами
Код
C++ (Qt)
Item::Item(QGraphicsItem *parent):
       QGraphicsItem(parent)
{
}
 
Item::~Item()
{
}
 
void Item::mousePressEvent(QGraphicsSceneMouseEvent* event)
{
   qDebug()<<"mousePressEvent";
}
 

Код
C++ (Qt)
class Item1: public QGraphicsItem
{
public:
   Item1(QGraphicsItem*parent = 0)
       :QGraphicsItem(parent),down(false){}
 
   QRectF boundingRect() const
   {
       return QRectF(0,0,100,70);
   }
 
   void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
   {
       painter->setBrush(down ? Qt::red : Qt::green);
       QPen pen(QBrush(down ? Qt::red : Qt::blue),3, Qt::DotLine);
       painter->setPen(pen);
       painter->drawEllipse(boundingRect());
   }
 
protected:
 
   void mousePressEvent(QGraphicsSceneMouseEvent* event)
   {
       if(!down)
       {
           down = true;
           update();
       }
   }
 
   void mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
   {
       if(event->buttons() == 0)
       {
           down = false;
           update();
       }
   }
 
private:
   bool down;
};
 

Код
C++ (Qt)
GraphicsScene::GraphicsScene(QString path, QObject*parent)
   : QGraphicsScene(parent)
{
   sceneImage = new QImage(path);
   QPixmap pixmap;
 
   Item* item =(Item *)(addPixmap(pixmap.fromImage(*sceneImage)));  
   addItem(new Item1);  
}
 
GraphicsScene:: ~GraphicsScene()
{
   delete sceneImage;
}
 

получается события,происходящие при нажатии мыши на Item1 обрабатываются, а на Item нет Непонимающий
Скажите почему, не могу понять! Спасибо!
Записан
_OLEGator_
Гость
« Ответ #25 : Май 26, 2014, 11:50 »

Не вижу определенной функции boundingRect для Item. Как ты его вообще в таком случаем смог использовать не понятно.
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #26 : Май 26, 2014, 11:58 »

А там Item и не используется. Код просто ужасен - может стоит подучить плюсы? В сцену сначала добавляется QGraphicsPixmapItem (именно этот объект создаст и возвратит указатель на него addPixmap). А полученный указатель приводится к другому классу и после этого не используется. Да и приведенный указатель, скорее всего, будет невалидным. Я  Плачущий
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #27 : Май 26, 2014, 12:24 »

Спасибо за разъяснение понял все
сделал так

Код
C++ (Qt)
GraphicsScene::GraphicsScene(QString path, QObject*parent)
   : QGraphicsScene(parent)
{
   sceneImage = new QImage(path);    
   QPixmap pixmap;
 
   item = new Item;
   item->setPixmap(pixmap.fromImage(*sceneImage));
 
   addItem(item);
   addItem(new Item1);
}
 
« Последнее редактирование: Май 26, 2014, 12:32 от demaker » Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #28 : Май 26, 2014, 12:41 »

Зачем хранить в сцене imageScene? После конвертации пиксмапа он не нужен. Да и fromImage статический метод.
« Последнее редактирование: Май 26, 2014, 12:42 от Hellraiser » Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #29 : Май 29, 2014, 12:39 »

Зачем хранить в сцене imageScene? После конвертации пиксмапа он не нужен.
Он же потом там пиксели меняет. Как ему это сделать напрямую в QGraphicsPixmapItem? Конвертировать item->pixmap() во локальный QImage, менять пиксел и потом обратно в pixmap? Тут я с автором согласен.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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