Как показать положение пикселя и цвет из QGraphicsPixmapItem - PullRequest
4 голосов
/ 06 февраля 2012

Я занимаюсь разработкой пользовательского виджета с помощью QGraphicsScene / View, и у меня нет с ним опыта.

Пользовательский виджет - это средство просмотра изображений, которое должно отслеживать движение мыши и отправлять на него сигнал (сигналы).родительский диалог / окно.Сигнал (ы) будет позицией пикселя под курсором мыши и его цветом (в RGB).Эта информация будет использоваться в строке состояния.

Я использую QGraphicsPixmapItem для отображения изображения, загружаемого из файла в сцене.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 06 февраля 2012

Прежде всего, вы должны внедрить mouseMoveEvent в свой элемент.В этой функции вы можете легко получить положение мыши, вызвав функцию pos.Вы можете получить значение rgb, преобразовав растровое изображение элемента в изображение и вызвав функцию pixel.Вам следует рассмотреть возможность хранения QImage в качестве переменной-члена, чтобы избежать нескольких преобразований.Наконец вы должны излучать пользовательский сигнал.Пример кода следующий:

void MyPixmapItem::mouseMoveEvent(QGraphicsSceneMouseEvent * event)
{
    QPointF mousePosition = event->pos(); 
    QRgb rgbValue = pixmap().toImage().pixel(mousePosition.x(), mousePostion.y());

    emit currentPositionRgbChanged(mousePosition, rgbValue);
}

Обратите внимание , что QGraphicsItems не наследуется от QObject, поэтому по умолчанию сигналы / слоты не поддерживаются .Вы также должны наследовать от QObject.Это то, что делает QGraphicsObject.И последнее, но не менее важное: я бы посоветовал вам включить отслеживание мыши на вашем QGraphicsView

1 голос
/ 20 ноября 2015

Я обнаружил, что подход mouseMoveEvent вообще не работает, по крайней мере, с Qt5.5. Однако включение событий hover с помощью setAcceptHoverEvents (true) для элемента и переопределение события hoverMoveEvent (событие QGraphicsSceneHoverEvent *) работало как чудо. Документы Qt на mouseMoveEvent () дают подсказку:

«Если вы получаете это событие, вы можете быть уверены, что этот предмет также получил событие нажатия мыши»

http://doc.qt.io/qt-5.5/qgraphicsitem.html#mouseMoveEvent

...