Hesiod icon indicating copy to clipboard operation
Hesiod copied to clipboard

Add 2D viewer

Open otto-link opened this issue 1 year ago • 1 comments

otto-link avatar Oct 19 '24 19:10 otto-link

#include <QImageReader>

class TiledImageItem : public QGraphicsItem {
public:
    TiledImageItem(const QString& imagePath) : m_imagePath(imagePath) {
        // Initialize reader and get image size
        QImageReader reader(imagePath);
        m_size = reader.size();
    }

    QRectF boundingRect() const override {
        return QRectF(0, 0, m_size.width(), m_size.height());
    }

    void paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*) override {
        // Get visible region in scene coordinates
        QRectF visibleRect = painter->transform().inverted().mapRect(painter->viewport());
        
        // Load and draw the visible portion
        QImageReader reader(m_imagePath);
        reader.setClipRect(visibleRect.toRect());
        QImage image = reader.read();
        painter->drawImage(visibleRect.topLeft(), image);
    }

private:
    QString m_imagePath;
    QSize m_size;
};

// Usage in main():
QGraphicsScene scene;
TiledImageItem* item = new TiledImageItem("path/to/large_image.jpg");
scene.addItem(item);
scene.setSceneRect(item->boundingRect());

CustomGraphicsView view;
view.setScene(&scene);
view.show();

otto-link avatar Apr 12 '25 12:04 otto-link