Название: Graphics View Framework Отправлено: demaker от Май 08, 2014, 13:38 Хочу закрасить произвольную область при нажатии кнопки мыши.
Код
Но закраска не происходит, хотя события по нажатию кнопки мыши срабатывают. Возможно ли закрасить произвольную область??? Название: Re: Graphics View Framework Отправлено: Hellraiser от Май 08, 2014, 13:58 Заливку области надо делать через fillRect(boundingRect(), QBrush(Qt::red)).
Название: Re: Graphics View Framework Отправлено: demaker от Май 08, 2014, 14:11 Да и каккую же область он мне закрасит???
Код: boundingRect(); Разве нет??? Название: Re: Graphics View Framework Отправлено: Bepec от Май 08, 2014, 14:17 Вы чего хотите? Закрасить произвольную область за пределами объекта ? Так он и закрасит. А перед этим painter clip'ом обрежет до размеров вашего объекта.
Сформулируйте свою хотелку полностью :) Название: Re: Graphics View Framework Отправлено: xokc от Май 08, 2014, 14:26 Вы чего хотите? Судя по единственному заданному вопросу,Возможно ли закрасить произвольную область??? он хочет ответ да/нет. Мой ответ - да.Если вопрос всё же "как это сделать?", то мой ответ использовать QPainter::drawPolygon. Только, как совершенно справедливо заметил Верес, в качестве координат рисуемого полигона стоило бы использовать точки внутри видимой области виджета, а не за её пределами. Название: Re: Graphics View Framework Отправлено: Hellraiser от Май 08, 2014, 14:27 Да и каккую же область он мне закрасит??? Он закрасит ту область в пределах фигуры, которую вернет boundingRect(), который сам же и определил. В программировании не бывает произвольных областей, любую надо определить.Код: boundingRect(); Разве нет??? Название: Re: Graphics View Framework Отправлено: demaker от Май 08, 2014, 15:10 А вот я сделал так - это правильно???
Код
Название: Re: Graphics View Framework Отправлено: demaker от Май 12, 2014, 10:00 Скажите, можно ли таким же образом
взять контур из bmp-файла и закрасить его? Название: Re: Graphics View Framework Отправлено: kamre от Май 12, 2014, 11:26 взять контур из bmp-файла Это как? Контур по определению векторная штука, представляемая набором точек (если состоит только из прямолинейных отрезков). А в bmp только растр.и закрасить его? Можно bmp загрузить в QImage, взять матрицу пикселей и самому заполнить нужные, которые как-бы в "контуре".Вот кстати похожая тема (http://www.qtcentre.org/threads/47137-How-to-draw-a-Qgraphicsitem-on-a-Qimage). Название: Re: Graphics View Framework Отправлено: demaker от Май 12, 2014, 14:58 Хочу в загруженной картинки изменить цвет пиксиля,
координаты которго получаю при нажатии мыши Код
Пытаюсь сделать с помощью функции Код: void QImage::setPixel ( int x, int y, uint index_or_rgb )This is an overloaded function. но эффекта никакого. Подскажите как сделать??? Название: Re: Graphics View Framework Отправлено: xokc от Май 13, 2014, 09:02 А сцена в курсе, что её изменили и надо перерисоваться?
Название: Re: Graphics View Framework Отправлено: demaker от Май 13, 2014, 09:40 это типа
Код: update() Подскажите конкретнее пожалуйста Название: Re: Graphics View Framework Отправлено: xokc от Май 13, 2014, 10:09 это типа update() сделать??? Вроде того.Подскажите конкретнее пожалуйста Я же не знаю, что именно потом у Вас со sceneImage делается.По коду из конструктора сцены я не могу этого понять. Кто и где у Вас sceneImage на экран выводит-то? Название: Re: Graphics View Framework Отправлено: demaker от Май 13, 2014, 10:12 Спасибо всем, разобрался.
Код
Но почему так сложно. Т.е я беру каждый раз и перезагружаю изображение. А проще нельзя??? Название: Re: Graphics View Framework Отправлено: Bepec от Май 13, 2014, 11:44 Можно. Но это будет сложнее :D Можно перегружать только изменившуюся часть и её же только отрисовывать :)
Название: Re: Graphics View Framework Отправлено: demaker от Май 13, 2014, 11:53 Подскажите как через RGB задавать цвет, который я хочу отрисовывать, а то никак не могу понять.
Название: Re: Graphics View Framework Отправлено: Bepec от Май 13, 2014, 12:16 QColor(R,G,B).
Название: Re: Graphics View Framework Отправлено: demaker от Май 13, 2014, 12:18 Код: sceneImage->setPixel( (int)(scenePoint.x()), (int)(scenePoint.y()) ,QColor(R,G,B)); Название: Re: Graphics View Framework Отправлено: xokc от Май 13, 2014, 18:26 Код: protected: Но почему так сложно. Т.е я беру каждый раз и перезагружаю изображение. А проще нельзя??? Код
Название: Re: Graphics View Framework Отправлено: Old от Май 13, 2014, 18:28 Для чего создавать ненужный экземпляр QPixmap?
Код
Название: Re: Graphics View Framework Отправлено: demaker от Май 23, 2014, 11:17 Скажите как можно в QGraphicsItem добавить QImage?
Название: Re: Graphics View Framework Отправлено: Hellraiser от Май 23, 2014, 12:25 В QGraphicsItem - никак. В QGraphicsPixmapItem - конвертируя QImage в QPixmap и указав в конструкторе. В свой класс, унаследованный от QGraphicsItem - аналогично.
Название: Re: Graphics View Framework Отправлено: demaker от Май 23, 2014, 14:34 Добавляю item в сцену отображает,
но почему-то при нажатии кнопки мыши по итему метод не срабатывает(в консоль не выводит "mousePressEvent") Подскажите что может быть неправильно? Код
Код
Код
Название: Re: Graphics View Framework Отправлено: demaker от Май 26, 2014, 10:16 ???
нет никаких вариантов? Название: Re: Graphics View Framework Отправлено: demaker от Май 26, 2014, 11:39 Попробовал с двумя итемами
Код
Код
Код
получается события,происходящие при нажатии мыши на Item1 обрабатываются, а на Item нет ??? Скажите почему, не могу понять! Спасибо! Название: Re: Graphics View Framework Отправлено: _OLEGator_ от Май 26, 2014, 11:50 Не вижу определенной функции boundingRect для Item. Как ты его вообще в таком случаем смог использовать не понятно.
Название: Re: Graphics View Framework Отправлено: Hellraiser от Май 26, 2014, 11:58 А там Item и не используется. Код просто ужасен - может стоит подучить плюсы? В сцену сначала добавляется QGraphicsPixmapItem (именно этот объект создаст и возвратит указатель на него addPixmap). А полученный указатель приводится к другому классу и после этого не используется. Да и приведенный указатель, скорее всего, будет невалидным. Я :'(
Название: Re: Graphics View Framework Отправлено: demaker от Май 26, 2014, 12:24 Спасибо за разъяснение понял все
сделал так Код
Название: Re: Graphics View Framework Отправлено: Hellraiser от Май 26, 2014, 12:41 Зачем хранить в сцене imageScene? После конвертации пиксмапа он не нужен. Да и fromImage статический метод.
Название: Re: Graphics View Framework Отправлено: xokc от Май 29, 2014, 12:39 Зачем хранить в сцене imageScene? После конвертации пиксмапа он не нужен. Он же потом там пиксели меняет. Как ему это сделать напрямую в QGraphicsPixmapItem? Конвертировать item->pixmap() во локальный QImage, менять пиксел и потом обратно в pixmap? Тут я с автором согласен. Название: Re: Graphics View Framework Отправлено: Hellraiser от Май 29, 2014, 14:27 А где их автор предполагает менять? Если в обработчике нажатия мыши для айтема, то этот айтем ничего не знает о наличии какого-то QImage. Ему в конструкторе передан QPixmap, вот с ним он и работает. Хранить sceneImage есть смысл только при изменении пикселя в обработчике нажатия самой сцены. А потом его все-равно придется переустановить для айтема, т.к. setPixmap принимает константную ссылку и изменение оригинала его не затронут.
Название: Re: Graphics View Framework Отправлено: xokc от Июнь 02, 2014, 13:41 А где их автор предполагает менять? Если в обработчике нажатия мыши для айтема Именно там.А потом его все-равно придется переустановить для айтема, т.к. setPixmap принимает константную ссылку и изменение оригинала его не затронут. Всё так и делается. Сначала в оригинале QImage меняется пиксель, а потом делается item->setPixmap(QPixmap::fromImage(*sceneImage))Если бы QImage нигде не хранился, то где бы взять его текущий экземпляр с изменёнными пикселями? Только преобразовать из item->pixmap(), изменить пиксель и обратно в QPixmap? Можно и так. Всё равно и то и другое решение "боевым" назвать сложно. |