QGraphicView über einem Bild zeichnen



  • Hallo,
    bin leider ein Neuling im Qt Gui Bereich.
    ich lade ein Bild in meine GraphicsView (über eine Scene). Das wird auch dargestellt. Jedoch möchte ich über das Image "zeichnen".

    Ziel: Also neben der GraphicView ist noch ein Button. Wenn man den drückt wird über das Bild ein gezeichnetes raster angezeigt. Wenn man nochmal drückt sind die Linien Weg. Also die Linien werden über dem Bild eingeblendet. (Die Bilddatei selbst soll nicht verändert werden)

    Das einlesen meines Bildes:

    void TestSoftware::display(const QFileInfo info)
    {
        m_scene->clear();
    
        QImage image;
        image.load(info.absoluteFilePath());
    
        QPixmap pmap(info.absoluteFilePath());
    
        m_scene->addPixmap(pmap);
        m_scene->setSceneRect(0,0,image.width(),image.height());
    
        ui->graphicsView_image->setScene(m_scene);
        ui->graphicsView_image->fitInView(m_scene->sceneRect(), Qt::KeepAspectRatio);
        ui->graphicsView_image->show();
    
    }
    

    Hat jemand eine Idee, wie ich nun über das Bild Linien ein und ausblenden kann ?
    Benutzt man da einen QPainter ?
    oder kann man zwei Szenen übereinander legen und die oberste ein und ausblenden ?

    Liebe Grüße,



  • Kannst du nicht das Bild in deine Scene laden? So als Hintergrund.



  • Du kannst mit addLine drüber zeichnen. Den GraphicItem* speichern und mit removeItem die Linien wieder entfernen.

    https://doc.qt.io/qt-5/qgraphicsscene.html#addLine

    https://doc.qt.io/qt-5/qgraphicsscene.html#removeItem



  • ja genau, die idee hatte ich nun auch.

    Also als Beispiel lege ich z.B, in meiner display Methode ein item an (als Member Variable)und adde das zur Scene hinzu,in der auch die pixmap mit dem Bild ist.

        QPen pen(Qt::green);
        m_rectItem = new QGraphicsRectItem(0, 0, 20, 20);
        m_rectItem->setPen(pen);
    
        pen.setWidth(2);
        m_scene->addItem(m_rectItem);
    

    daraufhin prüfe ich einfch in der Button-Methode, ob das Rechteck gezeichnet ist oder nicht und führe dann

    m_scene->removeItem(m_rectItem);
    

    oder

    m_scene->addItem(m_rectItem);
    

    aus.

    Also das ist die Idee, die ich jetzt die Tage umsetzen werde. Nur das alle Linien noch in einem QGraphicsItemGroup Item gebündelt werden, sodass sie wie ein einzelnes Item behandelt werden


Anmelden zum Antworten