Отображать пользовательское изображение и иметь возможность ловить ввод мыши - PullRequest
1 голос
/ 31 мая 2011

Я пытаюсь отобразить несколько изображений в MainWindow и могу выполнять определенные действия, когда эти изображения получают mousePressEvent.

Для этого я подумал, что создам новый класс, производный от QWidget, который имеет закрытый член QImage. Благодаря этому я могу переопределить paintEvent и mousePressEvent, чтобы отображать изображение и ловить ввод мыши.

Однако проблема в том, что изображение, нарисованное в MainWindow, имеет размер виджета и его форму (прямоугольную), а изображение не имеет той же формы (даже не обычной формы). Это вызывает некоторые проблемы, потому что я могу перехватить mousePressEvent на частях, которые не принадлежат моему изображению, но принадлежат области виджетов.

У кого-нибудь есть идеи, как это решить? Я все еще новичок в QT, поэтому, пожалуйста, не возражайте против какой-либо огромной ошибки :)


Обновление: Хорошо, я попробовал другой подход.

Теперь у меня есть MainView в моем MainWindow с привязкой к нему graphicScene. К этой сцене я добавил несколько графических элементов.

Для реализации своих графических элементов мне пришлось перегружать boundingRect и метод рисования. Что касается документации, я понимаю, что QT использует метод shape (который вызывает boundingRect) для определения формы объекта для рисования. Это могло бы быть решением моей проблемы или, по крайней мере, одним решением для повышения точности нарисованной формы.

На данный момент я возвращаю квадрат с размером моего изображения в boundingRect. Кто-нибудь знает, как я могу «адаптировать» форму к своему изображению (напоминающему цилиндр)?

Ответы [ 2 ]

0 голосов
/ 31 мая 2011

Если вы хотите использовать QWidget, вам следует взглянуть на концепцию маски, чтобы уточнить пространство, занимаемое вашими изображениями (будьте осторожны с производительностью этой реализации).

Если вы решили пойти сQGraphicsItems вы можете повторно реализовать виртуальный метод QPainterPath QGraphicsItem::shape () const, чтобы вернуть путь, представляющий как можно более границу ваших изображений.

Документация Qt гласит:

Форма используется для многих вещей, включая обнаружение столкновений, тесты попаданий и для QGraphicsScene :: items ()функции.

Я призываю вас перейти на систему QGraphics, это звучит более уместно в вашем случае.

0 голосов
/ 31 мая 2011

Что я понимаю, так это то, что вы хотите сжать / расширить / преобразовать свое изображение, чтобы оно соответствовало пользовательской форме (например, цилиндру).Я предлагаю использовать модуль OpenGL QGLWidget и сопоставить каждую координату вашего прямоугольного изображения (0,0) (0,1) (1,0) (1,1) с пользовательской формой, созданной в OpenGL.

Он будет действовать как отображение текстуры.

Редактировать: вы все равно можете поймать ввод мыши в OpenGL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...