1

拡張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, 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;
}

主要

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

1 に答える 1

2

コンストラクターのスタックQGraphicsItemにローカル変数として割り当てられたものを追加しています。QGraphicsSceneコンストラクターが終了すると、スタック上のオブジェクトの割り当てが自動的に解除され(つまり、削除され)、場合によってはシーンから削除されます。new演算子を使用してアイテムを作成します。

于 2011-05-23T13:39:52.510 に答える