首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展QGraphicsScene

扩展QGraphicsScene
EN

Stack Overflow用户
提问于 2011-05-23 16:36:16
回答 1查看 1.1K关注 0票数 1

我正在扩展要添加到扩展QGraphicsSene中的QGraphicsItem。当我以正常的方式将扩展项添加到场景和场景添加到图形视图时,它会显示图像,但当我按如下方式添加图像时,它不会显示。有没有人可以检查一下这个,告诉我问题所在。

标题

代码语言:javascript
复制
#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 //

来源

代码语言:javascript
复制
#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;
}

main

代码语言:javascript
复制
int main(int argv, char* argc[])
{
    QApplication app(argv,argc);
    ImageHolder scene;
    QGraphicsView view(&scene);
    view.resize(512,512);
    view.show();
    return app.exec();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-23 21:39:53

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6094745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档