Go back to Richel Bilderbeek's homepage.
Go back to Richel Bilderbeek's C++ page.
QGraphicsPixmapItem example 4: pixmap that changes cursor is a
QGraphicsPixmapItem example. This example shows how to put multiple movable
QGraphicsPixmapItems on screen,
let them respond to mouse clicks using a boost::signal, let the user select
one or more item (and show this by drawing those items differently) and change the cursor shape when the mouse cursor moves over the item.
This example is the precedent of QGraphicsObject example 1: basic.
Technical facts
Application type(s)
Operating system(s) or programming environment(s)
IDE(s):
Project type:
C++ standard:
Compiler(s):
Libraries used:
Qt: version 5.4.1 (32 bit)
STL: GNU ISO C++ Library, version 4.9.2
Qt project file: ./CppQGraphicsPixmapItemExample4/CppQGraphicsPixmapItemExample4.pro
./CppQGraphicsPixmapItemExample4/qtitem.h
./CppQGraphicsPixmapItemExample4/qtitem.cpp
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
#include <cassert>
#include <QCursor>
#include <QPainter>
#include "qtitem.h"
#pragma GCC diagnostic pop
QtItem::QtItem(QGraphicsItem *parent)
: QGraphicsPixmapItem(parent),
m_clicked_signal{}
{
assert(this->pixmap().isNull()
&& "Assume no pixmap loaded yet");
//Load the pixmap from resources
this->setPixmap(QPixmap(":/images/PicR.png"));
assert(!this->pixmap().isNull()
&& "Assume pixmap is loaded successfully");
//Let the item have (0.0,0.0) as its center,
//so it will remain in place when rotating
this->setOffset(-pixmap().rect().center());
this->setFlags(
QGraphicsItem::ItemIsMovable
| QGraphicsItem::ItemIsSelectable);
//Without this line, hoverMoveEvent will not be called
this->setAcceptHoverEvents(true);
}
void QtItem::hoverMoveEvent(QGraphicsSceneHoverEvent *)
{
this->setCursor(QCursor(Qt::PointingHandCursor));
}
void QtItem::mousePressEvent(QGraphicsSceneMouseEvent *)
{
//Emit the boost signal
m_clicked_signal(this);
}
void QtItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
//Let QGraphicsPixmapItem handle most of the painting
QGraphicsPixmapItem::paint(painter,option,widget);
//Draw a thick red line around the pixmap when it is selected
if (this->isSelected())
{
painter->setPen(QPen(QColor(255,0,0),3));
painter->drawRoundedRect(this->boundingRect().adjusted(3.0,3.0,-3.0,-3.0),6.0,6.0);
}
}
|
./CppQGraphicsPixmapItemExample4/qtmain.cpp
./CppQGraphicsPixmapItemExample4/qtwidget.h
./CppQGraphicsPixmapItemExample4/qtwidget.cpp
Go back to Richel Bilderbeek's C++ page.
Go back to Richel Bilderbeek's homepage.

This page has been created by the tool CodeToHtml