扩展QGraphicsScene

问题描述

| 我正在扩展
QGraphicsItem
添加到扩展的
QGraphicsSene
中。当我以常规方式将扩展项添加到场景并将场景添加到图形视图时,它会显示图像,但是当我按如下方式添加图像时,它不会显示。有人可以检查一下,并告诉我问题。 标头
#ifndef IMAGEMAP_H
#define IMAGEMAP_H

#include <QGraphicsItem>
#include <QGraphicsScene>

class ScanImage : public QGraphicsItem
{
public:
    ScanImage(const QString imgsrc);
    ~ScanImage();

    void setimageSource(const QString is);
    QString imageSource();

    QRectF boundingRect() const;
    void paint( QPainter *painter,const qstyleOptionGraphicsItem *option,QWidget *widget);

protected:
     void mousepressEvent(QGraphicsSceneMouseEvent *mouseEvent);

private:
     QString imgsrc;
};

class ImageHolder : public QGraphicsScene
{
public:
    ImageHolder();
    ~ImageHolder();

protected:
    void mousepressEvent(QGraphicsSceneMouseEvent *mouseEvent);
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent);

private:
    QRectF selectedRect;
};

#endif //
资源
#include \"imagemap.h\"
#include \"QtGui\"

ScanImage::ScanImage(const QString is)
{
    imgsrc=is;
    update();
}

ScanImage::~ScanImage()
{
}

ImageHolder::ImageHolder()
{
    setSceneRect(0.0,0.0,512.0,512.0);
    ScanImage im(\"2.jpg\");
    im.setZValue(1.0);
    im.setVisible(true);
    addItem(&im);
}

ImageHolder::~ImageHolder()
{
}

void ScanImage::mousepressEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug() <<event->pos();
}

void ImageHolder::mousepressEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug() <<event->scenePos().rx();
    selectedRect.setTopLeft(event->scenePos());
}

void ImageHolder::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    qDebug() <<mouseEvent->scenePos().ry();
    selectedRect.setBottomright(mouseEvent->scenePos());
    addRect ( selectedRect);
}

QRectF ScanImage::boundingRect() const
{
    return QRectF(0.0,512.0);
}

void ScanImage::paint( QPainter* painter,const qstyleOptionGraphicsItem*,QWidget* )
{
    QRectF target(0.0,512.0);
    QRectF source(0.0,512.0);
    painter->drawImage(target,QImage(imgsrc),source);
}

void ScanImage::setimageSource(QString is)
{
    imgsrc = is;
}

QString ScanImage::imageSource()
{
    return imgsrc;
}
主要
int main(int argv,char* argc[])
{
    QApplication app(argv,argc);
    ImageHolder scene;
    QGraphicsView view(&scene);
    view.resize(512,512);
    view.show();
    return app.exec();
}
    

解决方法

您要在
QGraphicsScene
构造函数的堆栈上添加作为局部变量分配的ѭ0。构造函数完成后,堆栈中的对象会自动释放(即删除),并且在您情况下会从场景中删除。使用
new
运算符创建项目。