#include <QtGui>
{
public:
{
}
protected:
if(evt->buttons().testFlag(Qt::LeftButton)) {
// handle the rubberband
if(rubberBand->isVisible()) {
QPoint mouseDownView
= mapFromScene
(mouseDownPos
);
lastMouseViewPos = evt->pos();
QRect rubberRect
(mouseDownView, lastMouseViewPos
);
rubberRect = rubberRect.normalized();
rubberBand->setGeometry(rubberRect);
path.addPolygon(p);
scene()->setSelectionArea(path, Qt::IntersectsItemShape);
}
}
}
qDebug() << "release";
rubberBand->hide();
}
qDebug() << "press";
if(!scene()->itemAt(mapToScene(evt->pos()))) {
mouseDownPos = mapToScene(evt->pos()).toPoint();
lastMouseViewPos = evt->pos();
rubberBand->setGeometry(mapFromScene(mouseDownPos).x(), mapFromScene(mouseDownPos).y(), 0,0);
rubberBand->show();
}
}
private:
};
void addItems(View *s)
{
item = s->scene()->addEllipse(100,210, 50, 150);
}
int main(int argc, char *argv[])
{
View *s = new View();
s->setScene(scene);
addItems(s);
s->show();
return app.exec();
}
#include <QtGui>
class View : public QGraphicsView
{
public:
View() : QGraphicsView()
{
rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
}
protected:
void mouseMoveEvent(QMouseEvent* evt) {
if(evt->buttons().testFlag(Qt::LeftButton)) {
// handle the rubberband
if(rubberBand->isVisible()) {
QPoint mouseDownView = mapFromScene(mouseDownPos);
lastMouseViewPos = evt->pos();
QRect rubberRect(mouseDownView, lastMouseViewPos);
rubberRect = rubberRect.normalized();
rubberBand->setGeometry(rubberRect);
QPolygonF p = mapToScene(rubberRect);
QPainterPath path;
path.addPolygon(p);
scene()->setSelectionArea(path, Qt::IntersectsItemShape);
}
}
QGraphicsView::mouseMoveEvent(evt);
}
void mouseReleaseEvent(QMouseEvent* evt) {
qDebug() << "release";
rubberBand->hide();
QGraphicsView::mouseReleaseEvent(evt);
}
void mousePressEvent(QMouseEvent* evt) {
qDebug() << "press";
QGraphicsView::mousePressEvent(evt);
if(!scene()->itemAt(mapToScene(evt->pos()))) {
mouseDownPos = mapToScene(evt->pos()).toPoint();
lastMouseViewPos = evt->pos();
rubberBand->setGeometry(mapFromScene(mouseDownPos).x(), mapFromScene(mouseDownPos).y(), 0,0);
rubberBand->show();
}
}
private:
QPoint mouseDownPos;
QPoint lastMouseViewPos;
QRubberBand *rubberBand;
};
void addItems(View *s)
{
QGraphicsEllipseItem *item = s->scene()->addEllipse(10,10, 150, 150);
item->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
item = s->scene()->addEllipse(100,210, 50, 150);
item->setFlags(QGraphicsItem::ItemIsSelectable);
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QRectF rect = QRectF(0,0, 1024,768);
QGraphicsScene* scene = new QGraphicsScene(rect);
View *s = new View();
s->setScene(scene);
addItems(s);
s->show();
return app.exec();
}
To copy to clipboard, switch view to plain text mode
Bookmarks