我试图让它成为如果用户点击QGraphicsItem它将为该项目制作一个QRubberBand。
我班上有以下内容:
void ImagePixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event){
if(currentKey == Qt::Key_Control){
qDebug("This is a control click");
origin = event->screenPos();
if (!selected.isNull())
selected = new QRubberBand(QRubberBand::Rectangle, event->widget());
selected->setGeometry(QRect(origin, QSize()));
selected->show();
}
}
这在setGeometry调用中给出了一个错误,但没有其他信息。这本质上是我从QRubberBand获得的代码,除了我必须使用event.screePos()并且我必须将QRubberBand的构造函数设置为event.widget()而不是“this”因为,我认为,QGraphicsItem不会继承自QWidget的?
有更好的方法吗?
由于
答案 0 :(得分:1)
我做了这个例子,我希望能帮助
我的自定义项目。
#ifndef ITEM_H
#define ITEM_H
#include <QtCore>
#include <QtGui>
class Item : public QGraphicsRectItem
{
public:
Item()
{
setRect(0,0,100,100);
}
void mousePressEvent(QGraphicsSceneMouseEvent * event)
{
origin = event->screenPos();
if (!rubberBand)
rubberBand = new QRubberBand(QRubberBand::Rectangle,0);
rubberBand->setGeometry(QRect(origin, QSize()));
rubberBand->show();
}
void mouseMoveEvent(QGraphicsSceneMouseEvent * event )
{
QRectF inside = QGraphicsRectItem::boundingRect();
QPointF mapPoint = mapFromScene(event->pos());
if(inside.contains(mapPoint))
rubberBand->setGeometry(QRect(origin, event->screenPos()).normalized());
}
void mouseReleaseEvent(QGraphicsSceneMouseEvent * event )
{
rubberBand->hide();
}
private:
QRubberBand * rubberBand;
QPoint origin;
};
#endif // ITEM_H
并显示视图
#include <QtGui>
#include "item.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsView w;
QGraphicsScene s;
Item * item = new Item();
w.setScene(&s);
s.addItem(item);
w.show();
return a.exec();
}