Pregunta

estoy extendiendo QGraphicsItem para ser agregado a una extensión QGraphicsSene.cuando agregué el elemento extendido a la escena y la escena a la vista de gráficos de la manera normal, muestra la imagen, pero cuando agregué la imagen de la siguiente manera, no se muestra.¿Alguien podría revisar esto y decirme el problema?

encabezamiento

#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 //

fuente

#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, 0.0, 512.0, 512.0);
}

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

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

QString ScanImage::imageSource()
{
    return imgsrc;
}

principal

int main(int argv, char* argc[])
{
    QApplication app(argv,argc);
    ImageHolder scene;
    QGraphicsView view(&scene);
    view.resize(512,512);
    view.show();
    return app.exec();
}
¿Fue útil?

Solución

Estás agregando un QGraphicsItem asignado como una variable local en el QGraphicsScene pila del constructor.Una vez que el constructor termina, los objetos en su pila se desasignan automáticamente (es decir,eliminado) y en su caso eliminado de la escena.Usar new operador para crear el artículo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top